【发布时间】:2021-02-02 07:45:46
【问题描述】:
假设我们有这个非常简单的类架构:
class Vehicle {}
class Car extends Vehicle {
wheels: Number
constructor(wheels: Number) {
super()
this.wheels = wheels
}
}
我想要实现在变量中存储扩展车辆的构造函数类型,如下所示:
let vehicleConstructor: typeof Vehicle = Car // this do not work
然后编译器抱怨Car 不能分配给类型typeof Vehicle。我可以理解为什么:这是因为两个类的构造函数没有相同的签名。要创建汽车,wheels 参数是必需的,而 Vehicle 不需要参数。
我在代码中真正想要的是拥有一组 Vehicle 构造函数:
let constructors: Array<typeof Vehicle> = [Car, Truck]
这样我就可以检查一个随机对象是否是数组中某个元素的实例。
我不会使用这个数组来创建车辆,所以我不关心构造函数的参数。我只需要确保我有一个函数数组或类构造函数返回Vehicle,无论参数如何。
知道如何实现这一目标吗?只有在 Typescript 中才有可能吗?
【问题讨论】:
-
对我来说,您的
let vehicleConstructor2: typeof Vehicle = Car工作正常,没有任何抱怨。 -
提供一个完整的例子。它应该可以工作,返回值是协变的,如果你有不同的参数,那么它可能不起作用,但然后使用自定义 ctor 签名
new () =>Vehicletypescriptlang.org/play?noImplicitReturns=false#code/… -
在我的机器上工作。
-
确实,我把问题分解得太多了——直到它真正起作用。我遇到了一个问题,因为在我的代码中构造函数没有相同的签名。我正在更新问题。
标签: typescript inheritance constructor polymorphism