如何在 JSDOC 中扩展 typedef 参数?

Nor*_*mal 2 javascript jsdoc typescript visual-studio-code

我有一个 typedef 的 JSDoc 注释,如下所示,

/**
 * @typedef {Object} obj1
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */
Run Code Online (Sandbox Code Playgroud)

我想要一个新的 typedef,其中还包含以下属性:

* @property {boolean} c - Property 3
* @property {boolean} d - Property 4
Run Code Online (Sandbox Code Playgroud)

除了ab之外,如何向对象添加任何其他属性?

在代码中,它是这样的:

/**
 * @typedef {Object} obj1
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */
Run Code Online (Sandbox Code Playgroud)

正如你所看到的, ab是共享的,所以我不想重复定义它们,它们是完全相同的。

如何向现有定义添加属性?

在代码中,我们可以这样做:

* @property {boolean} c - Property 3
* @property {boolean} d - Property 4
Run Code Online (Sandbox Code Playgroud)

我们可以做像下面的 jsDoc 这样的事情吗?

/**
 * @typedef {Object} obj1
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */

/**
 * @typedef {Object} obj2
 * @property {...obj1}
 * @property {boolean} c - Property 3
 * @property {boolean} d - Property 4
 */
Run Code Online (Sandbox Code Playgroud)

??

Nor*_*mal 5

解决方案很简单:

这是通过使用以下语法:

/** 
 * @typedef {Obj1Props & Obj2Props} obj2
*/
Run Code Online (Sandbox Code Playgroud)

完整解决方案:

/**
 * @typedef {Object} Obj1Props
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */

/**
 * @typedef {Object} Obj2Props
 * @property {boolean} c - Property 3
 * @property {boolean} d - Property 4
 */

/** 
 * @typedef {Obj1Props & Obj2Props} obj2
*/

/** @type {Obj1Props} */
const obj1 = {
  a: true,
  b: false
}

/** @type {obj2} */
const obj2 = {
  a: true,
  b: false,
  c: true,
  d: false
}
Run Code Online (Sandbox Code Playgroud)