如何指定继承class的模板类型?
How to specify template type of inherited class?
考虑一个通用集合:
/**
* 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);
}
}
我如何告诉 JSDoc 假设继承的 class 上的 items
是 Item[]
而不是 TSingleItem[]
?
我在 class 上面试过这个:
/**
* @extends {ItemsCollection<Item>}
* */
class Items extends ItemsCollection
至少在 visual studio 中没有帮助。正确的语法是什么?如果它与 Visual Studio intellisense 一起使用可加分。
事实证明这是正确的代码,正如所见 in this nice tutorial:
/**
* @extends {ItemsCollection<Item>}
* */
class Items extends ItemsCollection
它在 Visual Studio 2017 年也有效,只是花了一段时间才流行起来。我要离开这个问答而不是删除,因为它不是很明显或不容易 google 确认。
考虑一个通用集合:
/**
* 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);
}
}
我如何告诉 JSDoc 假设继承的 class 上的 items
是 Item[]
而不是 TSingleItem[]
?
我在 class 上面试过这个:
/**
* @extends {ItemsCollection<Item>}
* */
class Items extends ItemsCollection
至少在 visual studio 中没有帮助。正确的语法是什么?如果它与 Visual Studio intellisense 一起使用可加分。
事实证明这是正确的代码,正如所见 in this nice tutorial:
/**
* @extends {ItemsCollection<Item>}
* */
class Items extends ItemsCollection
它在 Visual Studio 2017 年也有效,只是花了一段时间才流行起来。我要离开这个问答而不是删除,因为它不是很明显或不容易 google 确认。