在typescript中返回实体数组最简洁的方法是什么?

时间:2017-07-25 17:25:10

标签: javascript arrays angular typescript

我正在试图找出从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;
}

问题:

  1. 创建对象初始化数组时,是否需要所有对象属性的值? 1A。如果是这种情况,开发人员通常会在类中初始化属性值吗?
  2. 有没有办法直接返回一个对象数组,类似于上面的getAuthors2()示例,而不是必须将它赋给变量然后返回变量?

2 个答案:

答案 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];
  }