2013-05-02 130 views
5

我想使用JSDoc暗示处理程序的参数,但它不起作用。我用@type和@param尝试过,它不起作用。官方的JSDoc没有包含任何有关这个问题的有用信息。我如何JSDoc @参数webstorm回调处理程序的参数?

这不起作用:

socket.on("data", 
    /** 
    * @param request {Object} 
    * @param request.code {Number} 
    * @param request.id {Number} 
    * @param request.sr {String} 
    */ 
    function(request) 
    {}); 

回答

2

您可以使用复杂的“类型定义”和“属性”标签。记录在:http://usejsdoc.org/tags-typedef.html 但是,“〜”字符似乎阻止WebIde链接类型注释。 (只需使用普通的typedef MyType的注释没有波浪和它的作品)

BTW,对于谷歌闭合方式:

/** @typedef {{code: Number, id: Number, str: String}} **/ 
SocketRequest; 

socket.on("data", handler); 

/** 
* @param {SocketRequest} req 
*/ 
function handler(req) { 
    //req will be hinted here 
} 

这jsdoc注释是专为谷歌关闭,但可以在不关闭使用贪图暗示。 (应该从2012年8月开始工作:http://blog.jetbrains.com/webide/2012/08/closure-syntax/

1

这是含糊不清的问题,所以这里是我的猜测:

socket.on("data", 
/** 
* @param request {Object} 
* @param request.code {Number} 
* @param request.id {Number} 
* @param request.sr {String} 
*/ 
function(request) 
    typeof request.id == 'number'; 
    console.log(request.sr); // will print out the string 
{}); 

的评论只是描述了数据/密钥,应在请求对象的预期。

+2

是的,注释不起作用,它既不识别代码也不识别sr。它甚至不会注册为对象。 – Discipol 2013-05-03 05:59:10