90

假设您有以下内容:

var someFunc = function() {
    // do something here with arguments
}

您将如何正确记录此函数可以在 JSDoc 中接受任意数量的参数?这是我最好的猜测,但我不确定它是否正确。

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

相关:php - 如何记录可变数量的参数

4

4 回答 4

130

JSDoc 规范Google 的 Closure Compiler是这样做的:

@param {...number} var_args

其中“数字”是预期的参数类型。

那么,它的完整用法如下所示:

/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}

请注意关于利用arguments(或某些偏移量arguments)访问您的附加参数的评论。var_args它只是用来向您的 IDE 发出该参数确实存在的信号。

ES6 中的 Rest 参数可以将实际参数进一步包含提供的值(因此不再需要使用arguments):

/**
* @param {...*} var_args
*/
function lookMaImES6Variadic(...var_args) {
    // Utilize the `var_args` array here, not `arguments`.
}
于 2011-01-30T07:30:28.493 回答
31

如何做到这一点现在在 JSDoc 文档中进行了描述,它使用省略号,就像 Closure 文档一样。

@param {...<type>} <argName> <Argument description>

您需要在省略号之后提供一个类型,但您可以使用 a*来描述接受任何内容,或者使用 the|来分隔多个可接受的类型。在生成的文档中,JSDoc 将把这个参数描述为可重复的,就像它把可选参数描述为可选一样。

在我的测试中,实际的 javascript 函数定义中不需要有参数,因此您的实际代码可以只有空括号,即function whatever() { ... }.

单一类型:

@param {...number} terms Terms to multiply together

任何类型(在下面的示例中,方括号的意思items将被标记为可选和可重复):

@param {...*} [items] - zero or more items to log.

多个类型需要在类型列表周围加上括号,省略号在左括号之前:

@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects
于 2015-02-16T06:49:10.800 回答
10

来自JSDoc 用户组

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

/**
 * @param [...] Zero or more child nodes. If zero then ... otherwise ....
 */

方括号表示一个可选参数,而 ... (对我而言)表示“某个任意数字”。

另一种可能是这个...

/**
 * @param [arguments] The child nodes.
 */

无论哪种方式都应该传达您的意思。

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

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

于 2011-10-31T13:50:46.737 回答
10

我为此烦恼了很长一段时间。以下是使用 Google Closure Compiler 执行此操作的方法:

/**
* @param {...*} var_args
*/
function my_function(var_args) {
    // code that accesses the magic 'arguments' variable...
}

关键是给你的函数一个var_args参数(或者你在@param语句中调用的任何参数),即使函数实际上并没有使用那个参数。

于 2014-01-19T03:28:08.527 回答