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

Javascript 如何在JSDOC中扩展typedef参数?,javascript,typedef,extend,jsdoc,type-definition,Javascript,Typedef,Extend,Jsdoc,Type Definition,假设ES6类(文档)中包含以下代码: 试试看 /** *@typedef{object.}Test~选项 *@property{array}elements-包含元素的数组 *@property{number}length-数组长度 */ /** *@param{Test~options}opt-Option对象 */ 测试(opt){ } /** *@typedef{Test~options}Test~options2 *@property{object}parent-父元素 */ /** *

假设ES6类(文档)中包含以下代码:

试试看

/**
*@typedef{object.}Test~选项
*@property{array}elements-包含元素的数组
*@property{number}length-数组长度
*/
/**
*@param{Test~options}opt-Option对象
*/
测试(opt){
}
/**
*@typedef{Test~options}Test~options2
*@property{object}parent-父元素
*/
/**
*@param{Test~options2}opt-Option对象
*/
测试2(可选){
}

我找到了这个解决方案,对我来说效果非常好。 源于


GitHub上的参考:这是迄今为止最好的解决方案,因为它将
Test~options 2
的类型指定为
Test~options
,并链接到后者。但这并不理想,因为它不会重复其“扩展”类型的所有参数;它只列出新的参数。JSDoc应该为这个做更好的标记。只是想在这里留下一个注释,以防它有用-我想你不会像看起来那样被迫在这里继承-你可以有这样的东西:@typedef{Mixin1&Mixin2}MyMix(但是请注意,当你这样做的时候,它似乎不喜欢在我的编辑器中向mix添加额外的属性)我试图用这个方法来扩展HtmleElement的属性,但没有成功。Andrew,请看我对另一个答案的评论——这个答案没有使用任何扩展语法,而“普通”JSDoc中不支持这种语法,在这种情况下,交集操作符(
&
)没有任何意义。我真的无法理解第一个解决方案在做什么。这个解决方案非常清楚,它被称为一个“”无法找到名称“Base”。ts(2304)交集类型是Typescript,在普通的JSDoc中。每个人都在将官方支持的JSDoc语法与Typescript的JSDoc解析实现混为一谈。我怀疑这是因为Typescript增强了VSCode Intellisense,它拥有相当大的市场份额,甚至在没有真正编写Typescript的人中也是如此。或者像这样内联:
@typedef{Base&{childProp:string}}Child
/**
 * @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~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){

 }
/**
 * @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){

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