示例:
基本类型:
/**
* @typedef {Object} LabelValue
* @template T
* @property {String} label
* @property {T} value
*/
可以用作
/** @type {LabelValue<SomeType>} */
我想像这样扩展此基本类型(也许这只是错误的语法,我不确定):
/**
* @typedef {LabelValue<T>} LabelValueExtended
* @template T
* @property {String} extensionProp
*/
我使用的是webstorm,它不会根据这样使用的类型向我显示任何建议:
/** @type {LabelValueExtended<SomeType>} */
此变体也不会触发来自webstorm的任何建议:
/**
* @typedef {LabelValue} LabelValueExtended
* @template T
* @property {String} label
* @property {T} value
* @property {String} extensionProp
*/
但是只有当我将自定义类型替换为Object
模板这样的通用类型时,才能正常工作。例如。这有效:
/**
* @typedef {Object} LabelValueExtended
* @template T
* @property {String} label
* @property {T} value
* @property {String} extensionProp
*/
我的第一个Base类型示例也很好用,因为它扩展了常见的Object
类型。但是如果我做一些虚假的事情,例如
/**
* @typedef {Object} Dummy
* @property {String} dummy
*/
/**
* @typedef {Dummy} LabelValue
* @template T
* @property {String} label
* @property {T} value
*/
它也破坏了来自网络风暴的任何财产建议。
没有模板的类型可以正常工作。例如。 / ** * @typedef {对象}虚拟 * @property {String}虚拟 * /
/**
* @typedef {Dummy} LabelValue
* @property {String} label
* @property {*} value
*/
如果这样使用:/** @type {LabelValue} */
,则webstorm会正确地建议两种类型的道具,但显然我不会为value
属性提供任何建议。
问题是:我对带有模板的jsdoc使用不正确的语法(请提出有效的语法)还是webstorm只是处理错误?