我想将泛型类型从子类传递到属性。
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()
出了什么问题?
答案 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();
}
}