146

根据@param 的JSDoc wiki,可以使用@param 表示可选

/**
    @param {String} [name]
*/
function getPerson(name) {
}

并且您可以使用以下方式指示参数内联

function getPerson(/**String*/ name) {
}

我可以像下面这样组合它们,效果很好。

/**
    @param [name]
*/
function getPerson(/**String*/name) {
}

但我想知道是否有办法在可能的情况下内联。

4

4 回答 4

168

来自官方文档

可选参数

一个名为 foo 的可选参数。

@param {number} [foo]
// or:
@param {number=} foo

可选参数 foo,默认值为 1。

@param {number} [foo=1]
于 2015-04-04T00:39:51.753 回答
70

经过一番挖掘,我发现这些也可以

/**
 * @param {MyClass|undefined}
 * @param {MyClass=}
 * @param {String} [accessLevel="author"] The user accessLevel is optional.
 * @param {String} [accessLevel] The user accessLevel is optional.
 */

只是视觉上更吸引人function test(/**String=*/arg) {}

于 2013-04-19T01:02:13.070 回答
59

I found a way to do this using Google Closure Compiler type expressions. You put an equals sign after the type like so: function test(/**String=*/arg) {}

于 2011-05-15T14:58:41.913 回答
6

如果您在函数参数上使用内联类型注释并且想知道如何在该表示法中将函数参数标记为可选,我发现只需为可选参数分配默认值即可。如果您希望默认设置为undefined您也必须明确设置它,否则该参数将不会被标记为可选(即使它前面已经有可选参数):

function demo(
  /** @type {String} */ mandatory,
  /** @type {Number} */ optional1 = 0,
  /** @type {Number} optional2 = undefined,
)

如果您将鼠标悬停demo在 IDE 中,您应该会同时看到两者optional1,并且optional2现在显示为可选。?在参数名称(TypeScript 表示法)后面指示的 VSCode 中。如果您从中删除= undefinedoptional2您只会看到optional1可选的,这当然是胡说八道,所以这里的默认值必须是明确的,就像我在上一段中提到的那样。

于 2019-07-11T11:19:51.497 回答