构造函数的Typescript多态性



假设我们有一个非常简单的类架构:

class Vehicle {}
class Car extends Vehicle {
wheels: Number
constructor(wheels: Number) {
super()
this.wheels = wheels
}
}

我想要的是在变量中存储一个扩展Vehicle的构造函数类型,比如:

let vehicleConstructor: typeof Vehicle = Car  // this do not work

编译器随后抱怨Car不能分配给类型typeof Vehicle。我能理解为什么:这是因为这两个类的构造函数没有相同的签名。要创建汽车,当Vehicle不需要参数时,wheels参数是必需的。

在我的代码中,我真正想要的是拥有一个Vehicle构造函数数组:

let constructors: Array<typeof Vehicle> = [Car, Truck]

这样我就可以检查一个随机对象是否是数组中某个元素的实例。

我不会使用这个数组来创建车辆,所以我不关心构造函数的参数。我只需要确保我有一个函数数组或类构造函数,它们返回Vehicle,无论参数如何。

你知道我该如何做到这一点吗?它只能用打字吗?

好吧,多亏了Titian Cernicova Dragomir的提示,我找到了答案。

我需要做的是:

let vehicleConstructor: (new(...args: any) => Vehicle) = Car

最新更新