我有几个项目,它们都是从抽象项目继承的。该对象应包含具有不同Item实现的映射。使用我当前的代码,我在对象中遇到以下错误:
TS2314:通用类型'Item <'T'>'需要1个类型参数
在Java中,这不是问题。如何在TypeScript中使用它?
项目
abstract class Item<T> {
}
class Item1 extends Item<boolean> {
}
class Item2 extends Item<number> {
}
Object.ts
class Object {
private itemMap: Map<number, Item>;
}
答案 0 :(得分:2)
尝试一下:
class Object {
private itemMap: Map<number, Item1 | Item2>;
}
如果您打算添加扩展Item
的新类并支持Object
中的类,则可以使用Item<any>
。
它适用于派生的Item
类存在的所有泛型类型;并且无法实例化具有尚未声明派生类的泛型类型的对象:
class Object {
private itemMap: Map<number, Item<any>>;
public constructor() {
this.itemMap = new Map();
this.itemMap.set(1, new Item1()); // ok
this.itemMap.set(2, new Item2()); // ok
this.itemMap.set(3, new Item<string>()); // Error: Cannot create an instance of an abstract class.
}
}