为什么 VS Code 会为数组项道具显示错误的 JSDoc?

时间:2021-06-08 01:53:46

标签: javascript visual-studio-code jsdoc

VS Code 上的 JSDoc 将 props 显示为对象而不是数组。

enter image description here

您可以通过将鼠标悬停在此 codesanbox snippet 中的函数名称上来自行测试。

根据JSDoc documentation,它应该能够记录:

  • 通过对象解构获得 prop 值:@param {string} employee.name
  • 数组项道具,如下所示:@param {string} employees[].name

我也找不到关于 VS Code docs 上的 JSDoc 支持的任何限制。

这会是 VS Code、JSDoc 或我记录 JavaScript 函数的方式的问题吗?

注意:我知道有一个使用 @typedef 的解决方法,如下所示,但我更想知道为什么文档没有按我的预期工作。< /p>

/**
 * A standard user
 * @typedef {Object} User
 * @property {number} id - The unique ID for the user.
 * @property {string} name - The user name.
 */

/**
 * Foo bar.
 * @param {Object} props - The props.
 * @param {User[]} props.users - A list of users.
 */
function foo(props) {

}

1 个答案:

答案 0 :(得分:1)

我不太确定为什么 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<RestKitExample.xx0x600002d463e0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key token.' 符号没有被正确识别。我找到了这个替代方案(不诉诸[]),它似乎与您想要的很接近:

@typedef
<块引用>

JSDoc 支持 Closure Compiler 的语法来定义数组和对象类型。

所以我们可以使用 /** * Foo bar. * @param {Object} props - The props. * @param {Array<{id:number, name:string}>} props.users - A list of users. */ function foo(props) { } 并记录如下定义的符号:
https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System

几个截图:

我承认这看起来不像 VS Code 确实理解那个符号:

enter image description here

但是,当您开始访问 Array<> 元素时,它看起来会更好:

enter image description here