假设我们有一个非常简单的类架构:
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