jsdoc:使用模板扩展类型(使用通用扩展类型)

时间:2018-12-03 10:28:54

标签: webstorm jsdoc

示例:

基本类型:

/**
 * @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只是处理错误?

0 个答案:

没有答案