jsdoc: расширение типа с помощью шаблона (расширение типа с помощью generic) - PullRequest
0 голосов
/ 03 декабря 2018

Пример:

Базовый тип:

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

Можно использовать как

/** @type {LabelValue<SomeType>} */

Я хочу расширить этот базовый типвот так (может быть, это просто неправильный синтаксис, я точно не знаю):

/**
 * @typedef {LabelValue<T>} LabelValueExtended
 * @template T
 * @property {String} extensionProp
 */

Я использую веб-шторм, и он не показывает никаких предложений, основанных на используемом типе:

/** @type {LabelValueExtended<SomeType>} */

Этот вариант также не вызывает никаких предложений от веб-шторма:

/**
 * @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
 */

И мой первый пример базового типа также работает нормально, поскольку он расширяет общий тип Object.Но если я сделаю что-то глупое, например

/**
 * @typedef {Object} Dummy
 * @property {String} dummy
 */

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

, это также нарушит любые предложения свойств из веб-шторма.

Типы без шаблонов работают нормально.Например / ** * @typedef {Object} Dummy * @property {String} dummy * /

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

Если использовать это так: /** @type {LabelValue} */, то веб-буря предлагает корректные реквизиты обоих типов, но, очевидно, яне получит никаких предложений по value свойству.

Вопрос: я использую неверный синтаксис для jsdoc с шаблонами (пожалуйста, предложите правильный) или веб-шторм просто обрабатывает его неправильно?

...