如何从Typescript / Angular 7中的对象变量获取类型?

特莫

我正在尝试从自定义对象实例获取类型/类。然后,它将用作传递给泛型函数的类型参数,而不仅仅是使用“ 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还是很陌生,所以我不确定这是否可能,但是希望有一种方法可以做到这一点。

感谢您对此的任何帮助。

Pascalpuetz

在您的示例中,您根本不应将类型添加到泛型中。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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Typescript Angular中的谓词类型的对象中获取元素

Angular / Typescript,如何重用类型

Angular2/Typescript:如何通过管道获取对象数组?

如何在Typescript / Angular2中返回动态类型的对象?

在Angular中(使用angularfire2和Typescript),如何获取使用Firestore时引发的错误的类型?

如何在Angular 2 / Typescript中声明全局变量?

如何在Angular 6 / Typescript中延迟可观察对象

如何在Angular HTML属性中编写复杂的Typescript对象

如何通过 Angular/TypeScript 中的单击事件循环遍历对象

如何在HTML(Ionic / Firebase / Angular)中显示TypeScript对象

如何在 angular/typescript 中初始化子 json 对象?

如何从“对象类型”中动态获取值并在“扩展”面板的Angular材质中实现?

如何从Angular 7中的Observable返回对象

在 Angular 中,如何从 FormArray 对象获取索引?

如何从 angular 或 javascript 的数组中获取对象

如何使用变量获取对象中的参数值?<Typescript>

如何从在 Angular 7 中传递 id 的 json 对象获取特定数据

如何从数组(本地存储)中的json对象获取特定数据-Angular 7

Angular 中的 Typescript 类型转换

如何定义外部库的类型。TypeScript,Angular和Google Picker

在实例对象内部的函数中获取类实例(this)-Typescript / Angular

使用 Angular 在 Typescript 中获取未定义的对象错误

Angular 2-TypeScript:如何使用<Select>控件保存对象

如何翻译日期对象 - Angular 9、TypeScript、HTML

如何使用Typescript(Angular2)遍历JSON对象

如何在Angular中使用TypeScript显示我的json对象?

如何在 Angular 的表单上使用 TypeScript 地图对象

如何在 TypeScript/Angular 中点击可观察对象返回?

Angular + TypeScript:如何使用HTTP Put获取方法