JSDoc:在“for...of”循环中为变量声明@type

Ale*_*sev 6 javascript types annotations jsdoc ecmascript-6

我可以使用 JSDoc注释为变量声明类型@type吗?

/** @type some.type */
for (let one of many) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

类似 PHPDoc 的注释:

/** @var \Some\Type $one */
foreach ($many as $one) {

}
Run Code Online (Sandbox Code Playgroud)

Luc*_*iva 7

是的你可以。你只需要在你的变量之前移动括号内的类型声明:

for (/** @type {SomeType} */ const one of many) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,尽管我通常更喜欢指定类型many。例如:

/** @type {Number[]} */
const many = [1, 2, 3, 4];
Run Code Online (Sandbox Code Playgroud)

然后one会自动推断出类型。

PS:注意我声明oneconst. 不管人们怎么猜,你都可以将for..of循环变量声明为常量!

  • 我有以下“for”:“for(/** @type {string} */ let event of JSON.parse(msg))”。`event` 仍然是 `any` 而不是 `string`,所以这个方法似乎不起作用(至少每次)。我尝试使用“string[]”作为“JSON.parse(msg)”,但“event”仍然是“any” (6认同)