Рассмотрим обобщенную коллекцию c:
/**
* A collection of items of the same type
* @template TSingleItem
* */
class ItemsCollection {
/** @type {TSingleItem[]} **/
get items() {
return [createSingleItem()];
}
/**
* Creates a new item based on the implementation type
* @param {string} param
* @returns {TSingleItem}
*/
createSingleItem(param) {
throw new Error("Pure virtual method call!");
}
}
Теперь мы реализуем ее как:
class Item {
constructor(name) {
this.name = name;
}
}
class Items extends ItemsCollection {
createSingleItem(param) {
return new Item(param);
}
}
Как мне сказать JSDo c, что предполагается, что items
на этот унаследованный класс - Item[]
не TSingleItem[]
?
Я пробовал это выше класса:
/**
* @extends {ItemsCollection<Item>}
* */
class Items extends ItemsCollection
Это не помогло в визуальной студии по крайней мере. Какой правильный синтаксис? Бонусные баллы, если он работает с Visual Studio intellisense.