javascript 如何在JSDOC中扩展typedef参数?

ou6hu8tu  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(164)

假设你在ES6类中有以下代码(文档):

/**
 * @typedef Test~options
 * @type {object.<string>}
 * @property {array} elements - An array containing elements
 * @property {number} length - The array length
 */

/**
 * @param  {Test~options} opt - Option object
 */
test(opt){

}

现在我想记录另一个函数,让我们将其命名为test2。此函数接受完全相同的options对象,但需要另一个属性parent
如何在不记录冗余选项的情况下记录这一点?冗余是指:

/**
 * @typedef Test~options
 * @type {object.<string>}
 * @property {array} elements - An array containing elements
 * @property {number} length - The array length
 */

/**
 * @param  {Test~options} opt - Option object
 */
test(opt){

}

/**
 * @typedef Test~options2
 * @type {object.<string>}
 * @property {array} elements - An array containing elements
 * @property {number} length - The array length
 * @property {object} parent - The parent element
 */

/**
 * @param  {Test~options2} opt - Option object
 */
 test2(opt){

 }
fhity93d

fhity93d1#

我找到了这个解决方案,这对我来说非常好。最初来自这里

/**
 * @typedef {Object} ChildType
 * @property {String} childProp
 *
 * @typedef {Base & ChildType} Child
 */

更新:您还可以使用@extends扩展jsdoc typedef。

/**
 * @typedef {object} ChildType
 * @extends Base
 * @property {string} childProp
 */

第二种解决方案更好,因为普通jsdocs不支持Base & ChildType

e5njpo68

e5njpo682#

试试看

/**
 * @typedef {object.<string>} Test~options
 * @property {array} elements - An array containing elements
 * @property {number} length - The array length
 */

/**
 * @param {Test~options} opt - Option object
 */
test(opt){

}

/**
 * @typedef {Test~options} Test~options2
 * @property {object} parent - The parent element
 */

/**
 * @param  {Test~options2} opt - Option object
 */
test2(opt){

}
o4hqfura

o4hqfura3#

我不喜欢没有“完整设置”的半生不熟的答案,所以这里有一个:

/**
 * @typedef {Object} Person
 * @property {string} name - The person's name
 * @property {number} age - The person's age
 */
/**
 * @typedef {Object} WizardProperties
 * @property {string[]} magicPowers
 * @typedef {Person & WizardProperties} Wizard
 */
/** @type {Wizard} */
export const wizard = {
    name: "Harry",
    age: 20,
    magicPowers: ["brroooomm"]
}

它也可以跨多个文件工作,但你必须使用import('./person').Person样式:

*person.mjs

/**
 * @typedef {Object} Person
 * @property {string} name - The person's name
 * @property {number} age - The person's age
 */

*wizard.mjs

/**
 * @typedef {Object} WizardProperties
 * @property {string[]} magicPowers
 * @typedef {import('./person').Person & WizardProperties} Wizard
 */
/** @type {Wizard} */
export const wizard = {
  name: "Harry",
  age: 20,
  magicPowers: ["brroooomm", "wheeeeeeeeeeeew"]
}

相关问题