javascript 如何使用jsdoc记录结构化变量

ax6ht2ek  于 2023-01-19  发布在  Java
关注(0)|答案(4)|浏览(173)

我有这样的东西:

let { total } = settings;

我如何记录总变量?我尝试了如下方法:

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

但似乎不是正确的方式。
有什么建议吗?

wtlkbnrh

wtlkbnrh1#

@Tommy-Pepsi Gaudreau在对原问题的评论中如此接近。
下面是闭包编译器工具中的一个示例@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日 *:我已经减少了初始类型的数量,以确保/澄清类型没有被忽略,并且警告来自解构中的类型。
wd2eg0qa

wd2eg0qa2#

如果要记录对象,简单的答案是:

/**
 * @type {{total: String}}
 */
let { total } = settings;

有关详细信息,请查看JSDoc documentation

7xzttuei

7xzttuei3#

对于任何直接结构化变量,您可以尝试此解决方法

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

nqwrtyyt4#

只需将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代码的截屏视频:

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

相关问题