如何使用内联JSDoc指示param是可选的?

时间:2011-05-03 18:23:09

标签: javascript google-closure-compiler jsdoc

根据@param的JSDoc wiki,您可以使用

指示@param是可选的
/**
    @param {String} [name]
*/
function getPerson(name) {
}

您可以使用

指示参数inline
function getPerson(/**String*/ name) {
}

我可以将它们组合起来,如下所示,这样就可以了。

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

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

4 个答案:

答案 0 :(得分:78)

来自official documentation

可选参数

  

名为foo的可选参数。

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

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

@param {number} [foo=1]

答案 1 :(得分:56)

经过一番挖掘,我发现这些也没关系

/**
 * @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) {}

更具视觉吸引力

答案 2 :(得分:45)

我找到了使用Google Closure Compiler type expressions执行此操作的方法。你在类型之后放了一个等号: function test(/**String=*/arg) {}

答案 3 :(得分:0)

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

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

如果在IDE中将鼠标悬停在demo上,您现在应该看到optional1optional2都显示为可选。在参数名称(TypeScript表示法)后由?表示的VSCode中。如果从= undefined中删除optional2,您将只会看到optional1是可选的,这当然是胡说八道,因此这里的默认值必须像我在上一段中提到的那样是明确的。