将“更大”的对象转换为Typescript中的“较小”对象

时间:2018-03-17 11:05:40

标签: typescript

我在将较大的物体分配到较小的物体时遇到了麻烦。但我想我最好用一个简单的例子来描述它:

假设我已经声明了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”子句来找出数据库对象上给出或不给出的属性,然后正确分配。

那么将具有多余属性的对象“转换”到另一个具有大量可选属性的对象中的最佳方法是什么?

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:2)

Typescript只是一个编译时工具:最后一切都是javascript,没有输入任何内容。

因此,您所谓的强制转换不同于,例如,在Java中称为强制转换(运行时检查已完成)。 在打字稿中你可以写:

const a: { prop: string } = (4 as any)

并且它根本不会成为问题,不能将它用作{ prop: string },它会失败,但是投射本身就可以了。

现在,如果你从某个地方检索到名为data的{​​{1}}的javascript对象,你可以写:

{ id: string; name: string; organizing_function: string}[]

这就是全部。