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


119

根据JSDoc Wiki的@param,您可以使用指示@param是可选的

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

您可以指示设置了一个param 在线使用

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

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

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

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

Answers:


123

根据官方文件

可选参数

名为foo的可选参数。

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

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

@param {number} [foo=1]

7
我在问如何内联。您提供的示例似乎与我在问题中显示的示例相同。
studgeek '16

67

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

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


9
这些是有效的(并记录在JSDoc帮助中),但它们不是内联的 -这正是我想要的。
studgeek

问题是关于内联JSDoc表示法的。这是有趣的信息,但不能回答问题
Ken Bellows 2016年

51

我找到了一种使用Google Closure Compiler 类型表达式执行此操作的方法。您在类型之后加上等号: function test(/**String=*/arg) {}


10
WebStorm / IntellIDEA支持此表示法
Peter Aron Zentai

3
是的,所以我认为它获得了足够的认可,将其标记为答案。
studgeek

4
@PeterAronZentai,由于要为其添加功能请求,因此我将添加WebStorm / IntelliIDEA支持它:)。现在,它们支持绝大部分的Google Closure Compiler类型表达式。
studgeek

1
对于可选的第二个参数不适合我。
DaveWalley 2014年

1
请修复链接;它指向404页
chharvey

3

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.