具有通用抽象对象的TypeScript映射

时间:2019-10-14 15:39:23

标签: typescript

我有几个项目,它们都是从抽象项目继承的。该对象应包含具有不同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>;
}

1 个答案:

答案 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.
  }
}