我有以下代码:
class Item {
firstname : string;
lastname : string;
getFullName() : string {
return this.firstname + " " + this.lastname;
}
}
let obj : object = {firstname : "Foo", lastname: "Bar"};
let item : Item = obj as Item;
console.log(item.getFullName());
上面的示例抛出异常,因为obj
不知道函数getFullName()
,因为我只是告诉编译器,obj
对象应该是{{ 1}},但事实并非如此。
是否可以将Item
对象转换为obj
对象,因此Item
已正确分配给getFullName()
而无需重新启动obj
?< / p>
我通过JSON接收嵌套对象,我不想遍历所有这些对象,只是为了创建相应的类对象。
我希望将接收到的对象的属性动态映射到类对象上,就像 cast 一样,但是添加所有缺少的属性和函数。
答案 0 :(得分:0)
Type assertions赢得了此功能。类型转换显式告诉编译器对象的类型,但它实际上不会更改该对象。但是,这就是构造函数的功能。
您可以将构造函数用作工厂函数并传递配置对象。然后,使用构造函数的主体来设置默认值,以防提供某些属性。将为您处理方法创建。
Random
现在,您可以从对象创建项目的新实例,如下所示:
class Item {
firstname : string;
lastname : string;
getFullName() : string {
return this.firstname + " " + this.lastname;
}
constructor(obj: Partial<Item>) {
this.firstname = obj.firstname || '';
this.lastname = obj.lastname || '';
}
}
我在这里使用了let obj : object = {firstname : "Foo", lastname: "Bar"};
let item = new Item(obj);
类型,允许您对新项目使用任何配置。您可以创建项目而无需在配置对象中提供所有必需的属性,它将自动为您分配它们。 E.g。
Partial
您现在不需要立即投放,因为let item2 = new Item({firstname: 'Foo'});
和item
实际上属于item2
类型。
在此处详细了解部分类型:https://www.typescriptlang.org/docs/handbook/advanced-types.html。