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

发布于 2024-11-04 17:21:56 字数 536 浏览 4 评论 0 原文

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

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

,并且您可以指示参数 内联 使用

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

我可以将它们组合起来,如下所示,效果很好。

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

但我想知道是否有一种方法可以在可能的情况下内联完成这一切。

According to the JSDoc wiki for @param you can indicate a @param is optional using

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

and you can indicate a param inline using

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

And I can combine them like the following, which works ok.

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

But I would like to know if there is a way to do it all inline if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

横笛休吹塞上声 2024-11-11 17:21:56

来自官方文档

可选参数

名为 foo 的可选参数。

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

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

@param {number} [foo=1]

From official documentation:

Optional parameter

An optional parameter named foo.

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

An optional parameter foo with default value 1.

@param {number} [foo=1]
温柔戏命师 2024-11-11 17:21: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) {} 在视觉上更具吸引力

After some digging up I found these are ok as well

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

Just slightly more visually appealing than function test(/**String=*/arg) {}

纸伞微斜 2024-11-11 17:21:56

我找到了一种使用 Google Closure Compiler 类型表达式。您可以在类型后面添加等号,如下所示:
函数测试(/**String=*/arg) {}

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) {}

意中人 2024-11-11 17:21:56

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

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

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

In case you are using inline type comments on function arguments and are wondering how to mark a function argument as optional in that notation, I found that just assigning default values to the optional arguments worked. If you want the default to be undefined you have to set it explicitly as well though, otherwise the argument won't be marked as optional (even if it preceded by already optional arguments):

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

If you hover over demo in your IDE you should see both optional1 and optional2 showing up as optional now. In VSCode that is indicated by ? after the argument name (TypeScript notation). If you remove = undefined from optional2 you will see only optional1 being optional which is of course nonsense so the default value here must be explicit like I alluded to in the above paragraph.

你与昨日 2024-11-11 17:21:56

最完整的答案将来自 官方打字稿文档

// Parameters may be declared in a variety of syntactic forms
/**
 * @param {string}  p1 - A string param.
 * @param {string=} p2 - An optional param (Google Closure syntax)
 * @param {string} [p3] - Another optional param (JSDoc syntax).
 * @param {string} [p4="test"] - An optional param with a default value
 * @returns {string} This is the result
 */

The most complete answer will be from the official typescript documentation.

// Parameters may be declared in a variety of syntactic forms
/**
 * @param {string}  p1 - A string param.
 * @param {string=} p2 - An optional param (Google Closure syntax)
 * @param {string} [p3] - Another optional param (JSDoc syntax).
 * @param {string} [p4="test"] - An optional param with a default value
 * @returns {string} This is the result
 */
浪漫之都 2024-11-11 17:21:56

使用 TypeScript 对 JSDoc 的处理,这是不可能的: https://github.com/microsoft/TypeScript /issues/47653

虽然您可以将参数标记为 @type { ... | undefined },它的可选性不会改变,因为所有参数都是可选的。

标记可选性/非可选性的方式是通过是否将参数名称放在括号中,但此语法中没有参数名称,因此仅修改类型(而不是同时以您可以的方式修改可选性) t 控制)是最直观的事情。

因此,对于 TS,您必须使用外部@param 注释块。

With TypeScript's handling of JSDoc, this is not possible: https://github.com/microsoft/TypeScript/issues/47653

While you can mark a param as @type { ... | undefined }, its optionality does not change, because all parameters are optional.

The way you mark optionality/non-optionality is by whether you put the param name in brackets, but there's no param name in this syntax, so only modifying the type (rather than also modifying the optionality in a way you can't control) is the most intuitive thing to do.

So with TS, you'll have to go with external @param comment blocks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文