我在将较大的物体分配到较小的物体时遇到了麻烦。但我想我最好用一个简单的例子来描述它:
假设我已经声明了Typescript接口:
export interface CrewMember {
name: string;
organizing_function?: string;
}
我现在从数据库中检索一个像这样的对象数组:
[{
id: "someID",
name: "Jack"
},{
id: "someOtherID",
name: "Jipp",
organizing_function: "Being good at stuff"
}]
我想创建一个数组< CrewMember>其中从数据库中放入对象。但是,我的问题是数据库中的对象有一个“ID”,“CrewMember”没有。因此我不能简单地分配它们因为Typescript抱怨类型不兼容。
我首先尝试过这样的事情:
let crewmember : CrewMember = {
name: database[0].name,
organizing_function: database[0].organizing_function
};
然而,这是(1)相当多的工作量,因为我有许多不同类型,比这更大,(2)困难,因为organizational_function是一个可选参数。所以,据我所知,我必须编写大量的“IF”子句来找出数据库对象上给出或不给出的属性,然后正确分配。
那么将具有多余属性的对象“转换”到另一个具有大量可选属性的对象中的最佳方法是什么?
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
Typescript只是一个编译时工具:最后一切都是javascript,没有输入任何内容。
因此,您所谓的强制转换不同于,例如,在Java中称为强制转换(运行时检查已完成)。 在打字稿中你可以写:
const a: { prop: string } = (4 as any)
并且它根本不会成为问题,不能将它用作{ prop: string }
,它会失败,但是投射本身就可以了。
现在,如果你从某个地方检索到名为data
的{{1}}的javascript对象,你可以写:
{ id: string; name: string; organizing_function: string}[]
这就是全部。