我正在试图找出从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";
}
];
}
以下函数错误输出b / c没有为MI提供值:
getAuthors3(): Author[]
{
var authors: Author[] =
[
{
FirstName: "John";
LastName: "Smith";
}
];
return authors;
}
问题:
答案 0 :(得分:0)
返回数组,而不是数组赋值的结果。
{{1}}
答案 1 :(得分:0)
如果您定义了一个接口,并且您创建了一个对象,您告诉TypeScript它应该属于该类型,那么它将会抱怨任何缺失的属性。
解决此问题的一种方法是使用映射类型,其中您声明对象的每个属性都是可选的,并使用它像 Partial<作者> 。请参阅official documentation for more info。
您可以立即返回阵列,只需删除您在返回后添加的类型:
getAuthors2(): Author[] {
return [
{
FirstName: 'John',
MI: 'J',
LastName: 'Smith',
}
];
}
此外,只要有可能,您应该删除手动定义的类型,例如从函数中返回作者[]。 TypeScript将使用type inference来自行解决。
在您的具体示例中,要么保留定义的返回类型,要么打字稿将进行必要的检查或使用类似于 getAuthors3 中的内容。如果您已经输入或已经输入了对象,只需将它们放在数组中,TypeScript将完成剩下的工作:
getAuthors() {
const author: Author = {
FirstName: 'John',
MI: 'J',
LastName: 'Smith',
};
return [author];
}