如何用TypeScript扩展某种类型的元素声明集合?

时间:2018-10-23 18:55:52

标签: typescript

我有一个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的正确方法是什么?

1 个答案:

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

从集合中检索实例时,您将不知道实际的类型,则需要测试类型。