代码之家  ›  专栏  ›  技术社区  ›  Maksim Nesterenko

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

  •  2
  • Maksim Nesterenko  · 技术社区  · 7 年前

    例子:

    /**
     * @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 模板工作正常。E、 g.这项工作:

    /**
     * @typedef {Object} LabelValueExtended
     * @template T
     * @property {String} label
     * @property {T} value
     * @property {String} extensionProp
     */
    

    我的第一个基类型的例子也很好,因为它扩展了common

    /**
     * @typedef {Object} Dummy
     * @property {String} dummy
     */
    
    /**
     * @typedef {Dummy} LabelValue
     * @template T
     * @property {String} label
     * @property {T} value
     */
    

    它也打破了webstorm的任何属性建议。

    没有模板的类型可以正常工作。例如。

    /**
     * @typedef {Object} Dummy
     * @property {String} dummy
     */
    
    /**
     * @typedef {Dummy} LabelValue
     * @property {String} label
     * @property {*} value
     */
    

    /** @type {LabelValue} */ ,然后webstorm正确地建议了这两种类型的道具,但显然我不会得到任何建议 value

    问题是:我对jsdoc和模板使用了错误的语法(请建议使用有效的语法),还是webstorm仅仅处理了错误的语法?

    0 回复  |  直到 6 年前
    推荐文章