Typescript将泛型传递给Map

时间:2018-07-06 08:55:59

标签: javascript typescript

我想将泛型类型从子类传递到属性。

interface MyInterface { 
    method(): void;
}

class B<P> {

    entities = new Map<number, P>();
}

class C<P = MyInterface> extends B<P> {

    click() {
      this.entities.get(1).method();
    }
}

我期望每个实体的类型均为MyInterface,但出现类型错误:

  

类型P上不存在属性method()

出了什么问题?

1 个答案:

答案 0 :(得分:2)

仅仅因为P = MyInterface并不意味着传入P的任何内容都必须扩展MyInterface。例如,在没有其他约束的情况下,这也将是有效的:

new C<{ noMethod() : void }>();

您需要向P添加约束,以使任何传入P的对象都必须扩展MyInterface,并且您还可以将MyInterface保留为默认值。< / p>

interface MyInterface {
  method(): void;
}

class B<P> {

  entities = new Map<number, P>();
}

class C<P extends MyInterface = MyInterface> extends B<P> {

  click() {
    this.entities.get(1).method();
  }
}