允许typeof接受子类

时间:2018-01-03 11:14:32

标签: typescript

考虑以下四个类:

export class Car {

}

export class Mercedes extends Car {

}

export class Animal<T extends Car> {
    car: T;
}

export class Dog extends Animal<Mercedes> {

}

另一个类保存了对这两个类的引用:

export class MyClass {
    constructor(animalClass: typeof Animal) {}
}

现在,以下内容无效:

let x = new MyClass(Dog);

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

为了实现这一目标,您需要按如下方式定义MyClass

export class MyClass<T extends Car> {
    constructor(animalClass: new() => Animal<T>) {}
}

此处MyClass是泛型类型,其构造函数采用可构造该泛型类型的Animal的内容。

Using Class Types in Generics下的文档中介绍了这一点。