我有一个Set
,并且这样的代码使用了Set
:
class A {
public test1(): void {
console.log("1");
}
}
class B extends A {
public test2(): void {
console.log("2");
}
}
class C extends B {
public test3(): void {
console.log("3");
}
}
let mySet: Set<any extends B> = new HashSet();//LINE X
在LINE X,我得到了泛型错误。声明此类Set的正确方法是什么?
答案 0 :(得分:2)
您只需要声明let mySet: Set<B>
。与B
兼容的任何类型都是有效的,这意味着B
的任何实例以及任何派生类(例如C
)。
class A {
public test1(): void {
console.log("1");
}
}
class B extends A {
public test2(): void {
console.log("2");
}
}
class C extends B {
public test3(): void {
console.log("3");
}
}
let mySet: Set<B> = new Set<B>();//LINE X
mySet.add(new B());
mySet.add(new C());
mySet.add(new A()); // error
从集合中检索实例时,您将不知道实际的类型,则需要测试类型。