我正在尝试从自定义对象实例获取类型/类。然后,它将用作传递给泛型函数的类型参数,而不仅仅是使用“ any”类型。
我已经尝试了foo.prototype,Object.getPrototypeOf(foo),typeof foo,foo.constructor,foo.constructor.name等,但是还没有找到一种方法来返回对象的类型/类本身。下面的示例给出了我想要实现的目标的想法-在这里不起作用,因为builder.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…
}
我对打字稿和JavaScript还是很陌生,所以我不确定这是否可能,但是希望有一种方法可以做到这一点。
感谢您对此的任何帮助。
在您的示例中,您根本不应将类型添加到泛型中。TypeScript可以在这种情况下推断类型,因为T
使用了参数。
// Use it like this:
buildVehicle(vehicle);
如果您确实要在此处添加通用名称,则可以使用typeof
。
buildVehicle<typeof vehicle>(vehicle);
在这种情况下,这相当于
buildVehicle<Car | Bike>(vehicle);
因为无法确定在编译时vehicle
实际上具有哪种类型。它只能在运行时确定。但是由于TypeScript类型在转换过程中会丢失(因为它会转换为JavaScript),因此无法使用当前代码执行此操作。
但是,您可以更改代码以使其在编译时可以确定。
if (vehicle instanceof Car) {
buildVehicle<Car>(vehicle); // Vehicle is narrowed down to type "Car"
} else if (vehicle instanceof Bike) { // else would suffice if only 2 possible types
buildVehicle<Bike>(vehicle); // Vehicle is narrowed down to type "Bike"
}
但是,就您而言,这可能没有多大意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句