【发布时间】:2019-12-01 23:32:28
【问题描述】:
我正在尝试从自定义对象实例中获取类型/类。然后,这将用作传递给泛型函数的类型参数,而不仅仅是使用“任何”类型。
我已经尝试过 foo.prototype、Object.getPrototypeOf(foo)、typeof foo、foo.constructor、foo.constructor.name 等,但还没有找到返回对象类型/类本身的方法。下面的示例说明了我想要实现的目标 - 它在这里不起作用,因为 constructor.name 只返回类型的名称:
var vehicle
if (selected == 'car') {
vehicle = new Car()
} else {
vehicle = new Bike()
}
var vehicleType = vehicle.constructor.name
buildVehicle<vehicleType>(vehicle)
buildVehicle<T>(vehicle:T) {
do stuff…
}
我对 typescript 和 javascript 还很陌生,所以我不确定这是否可行,但希望有办法做到这一点。
感谢您对此的任何帮助。
【问题讨论】:
-
Typescript 类型在运行时不存在,因此您无法从对象实例中获取
vehicleType,然后将其作为类型参数传递给buildVehicle<vehicleType>(vehicle)。如果您考虑一下,buildVehicle<vehicleType>(vehicle)需要 compile-time 的类型,但如果您的代码确实有效,您只能在 run-time获得该类型>. -
@MichałTkaczyk - 该链接只获取名称 - 我想获取类型本身
-
@Collierre - 如果我想获得一个接口,我认为这只是一个限制(即你可以在运行时获得类但不能获得接口)。我知道如果我明确输入
buildVehicle<Car>(vehicle)它将正常工作 - 我只是不知道如何从实例中获取对 Car(或 Bike)的引用。 -
@TeMo,typescript 在运行时是 javascript,而在运行时的 javascript 中,您无法从其中一个实例中获取类(尽管您可以获取类名)。因此你也不能在打字稿中。
标签: angular typescript