Javascript 在JSDoc中记录开放式参数函数的正确方法

Javascript 在JSDoc中记录开放式参数函数的正确方法,javascript,jsdoc,Javascript,Jsdoc,假设您有如下内容: var someFunc = function() { // do something here with arguments } /** * @param {...*} var_args */ function lookMaImVariadic(var_args) { // Utilize the `arguments` object here, not `var_args`. } 如何正确地证明此函数可以接受JSDoc中任意数量的参数?这是我最好的猜测

假设您有如下内容:

var someFunc = function() {
    // do something here with arguments
}
/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}
如何正确地证明此函数可以接受JSDoc中任意数量的参数?这是我最好的猜测,但我不确定它是否正确

/**
 * @param {Mixed} [...] Unlimited amount of optional parameters
 */
var someFunc = function() {
    // do something here with arguments
}
与相关:

并按以下方式执行:

@param {...number} var_args
其中“number”是预期的参数类型

因此,此功能的完整用法如下所示:

var someFunc = function() {
    // do something here with arguments
}
/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}
请注意有关使用
参数
(或
参数的某些偏移量
)访问其他参数的注释
var_args
它只是用来向IDE发出信号,表明参数确实存在

可以进一步使用实参数来包含提供的值(因此无需再使用
参数
):

从:

没有任何正式的方法,但一种可能的解决方案是:

/**
 * @param [...] Zero or more child nodes. If zero then ... otherwise ....
 */
方括号表示可选参数,而。。。会(对我)表示“某个任意数字”

另一种可能性是

/**
 * @param [arguments] The child nodes.
 */
无论哪种方式都应该传达你的意思

虽然它有点过时(2007年),但我不知道还有什么更流行的


如果您需要将param类型记录为“mixed”,请使用
{*}
,如
@param{*}[arguments]

我对此进行了相当长的讨论。以下是如何使用Google Closure Compiler执行此操作:

/**
* @param {...*} var_args
*/
function my_function(var_args) {
    // code that accesses the magic 'arguments' variable...
}
关键是给函数一个
var_args
参数(或在
@param
语句中调用的任何参数),即使该函数实际上没有使用该参数。

如何做到这一点在JSDoc文档中,它使用了与闭包文档类似的省略号

@param {...<type>} <argName> <Argument description>
任何类型(在下面的示例中,方括号表示
将被标记为可选和可重复):

多个类型需要在类型列表周围加括号,在开始部分前加省略号:

@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects

这可能是我们能得到的最接近的答案:)同样值得注意的是,WebStorm的内部JSDoc文件(DHTML.js等)使用相同的语法。也许这是事实上的标准。这里也有很好的描述:(部分“允许参数重复”)这个答案应该被编辑以整合Adrian Holovaty的答案:需要一个名为
var_args
的实际变量,或者任何你想作为唯一参数调用的变量。悲哀的黑客。在ES6中添加了,这就更有意义了<代码>/**@param{…Function}任务这些任务。*/函数waterwallstasks(…tasks){Rest参数在参数中总是有函数存在。我不介意我的答案被否决,但我确实希望得到一条评论来解释你为什么这么做(无论你是谁)。如果你认为这是错的,请让我和我们所有人知道原因。我的IDE选择(WebStorm 8.0.1)支持语法#2
@param[arguments]
(或
@param{*}[arguments]
)以及Google闭包编译器(在另一个答案中提到)建立的语法。
@param[…]不支持
。@mistaecko,但只有命名参数正确吗?这是我不使用的,所以这对我来说不是一个可接受的答案…那么用作键值对的对象呢?目前我使用:
@param{{…(key:value)}[config]-此传输的具体配置
,但不知道这是否正确?@Max我无法从文档中判断这是否是正式的正确方式,但它看起来应该如预期的那样工作。因此,如果它生成的输出您满意,我会使用它:)
@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects