我正在尝试找出从 ts 函数返回对象数组的最简洁方法。以下函数按预期工作:
getAuthors1(): Author[]
{
var authors: Author[] =
[
{
FirstName: "John";
MI: "J";
LastName: "Smith";
}
];
return authors;
}
以下函数出错,b/c 似乎 ts 不允许我直接返回对象数组而不是作为变量:
getAuthors2(): Author[]
{
return Author[] =
[
{
FirstName: "John";
MI: "J";
LastName: "Smith";
}
];
}
由于没有为 MI 提供值,以下函数会出错:
getAuthors3(): Author[]
{
var authors: Author[] =
[
{
FirstName: "John";
LastName: "Smith";
}
];
return authors;
}
问题:
- 创建对象初始化数组时,所有对象属性都需要值吗? 1a.如果是这种情况,开发人员通常会初始化类中的属性值吗?
- 有没有办法直接返回对象数组,类似于上面的 getAuthors2() 示例,而不是必须将其分配给变量然后返回该变量?
最佳答案
如果您定义了一个接口(interface),并创建了一个对象,并告诉 TypeScript 它应该是该类型,它会提示任何缺少的属性,这是理所应当的。
解决这个问题的一种方法是使用映射类型,其中您声明对象的每个属性都是可选的,并像Partial< Author >一样使用它。请参阅official documentation for more info .
您可以立即返回数组,只需删除返回后添加的类型即可:
getAuthors2(): Author[] {
return [
{
FirstName: 'John',
MI: 'J',
LastName: 'Smith',
}
];
}
此外,只要有可能,您应该删除手动定义的类型,例如函数中的返回 Author[]。 TypeScript 将使用 type inference自己弄清楚。
在您的具体示例中,您可以保留定义的返回类型, typescript 将进行所需的检查,或者使用类似于 getAuthors3 中的内容。如果您获取或已经输入了对象,只需将它们放入数组中,TypeScript 将完成剩下的工作:
getAuthors() {
const author: Author = {
FirstName: 'John',
MI: 'J',
LastName: 'Smith',
};
return [author];
}
关于javascript - 在 typescript 中返回实体数组的最简洁方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45309970/