如何使用jsdoc记录解构变量

21

我有这样的东西:

let { total } = settings;

我如何记录总变量?我尝试了这样的代码:

/**
 * @type {Object}
 * @property {String} total.test
 */
let { total } = settings;

但这似乎不是正确的方法。

有什么建议吗?


考虑到解构可以一次声明多个变量,因此您可能需要将jsdoc移动到对象大括号内部? - Bergi
@Bergi你的意思是这样的吗:let { /** * @type {Object} * @property {String} total.test */ totalInCart } = mincartSettings;如果是的话,它似乎也不起作用。 - Tommy Gaudreau
那是我会尝试的,但是我没有头绪。 - Bergi
1
没有解决方法吗?我也在寻找解决办法。我猜人们转向TypeScript而不是寻找解决方案。 - shinyatk
4个回答

12
如果您想记录一个对象,简单的答案是:
/**
 * @type {{total: String}}
 */
let { total } = settings;

详情请参考JSDoc文档


5

@Tommy-Pepsi Gaudreau 在原问题的评论中非常接近答案。

这里有一个在Closure Compiler工具@closure-compiler.appspot.com中的示例

let /** @type {Object<string|boolean>} */ settings = {};
let str = 'string';
let bool = true;
settings.b = bool;
settings.s = str;

// Note that at this point, b and s are of the type {string|boolean}.

let {/** @type {string} */ s,/** @type {boolean} */ b } = settings;

console.log({b, s});

// But now, when we assign the wrong types, we get a warning.

b='warn';
s=false;

警告数量:2

JSC_TYPE_MISMATCH: assignment
found   : string
required: boolean at line 15 character 4
    b='warn';
    ^
JSC_TYPE_MISMATCH: assignment
found   : boolean
required: string at line 16 character 4
    s=false;
    ^

编辑 - 2018年9月27日:我减少了初始输入的数量,以确保/澄清类型没有被忽略,并且警告来自解构中的类型。


3
实验性地,似乎Typescript不解析此答案中显示的标签 - 是否有它理解的替代语法? - sandinmyjoints

4

对于任何直接解构的变量,您可以尝试使用以下解决方法:

/**
 * @typedef {object} DestructuredVariable
 * @property {string} total
 */
/** @type {DestructuredVariable} */
const {total} = getUser();

4

只需在解构块中嵌入 JSDoc 块:

const {

  /**
   * The answer to everything
   * @type {number}
   */
  a,

  /**
   * The perfect food container
   * @type {string}
   */
  b,
  
  /**
   * Some other stuff
   * @type {object}
   * @property {string} foo Random text
   * @property {boolean} baz Random flag
   */
  c
} = {a: 42, b: 'burrito', c: { foo: 'bar', baz: true }};

VS Code 的屏幕录像:

输入图像描述

使用 yarn jsdoc file1.js 生成的文档:

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接