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

标签 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";                    
                }
            ];
    }

由于没有为 MI 提供值,以下函数会出错:

getAuthors3(): Author[]
{
    var authors: Author[] =
        [
            {
        FirstName: "John";      
        LastName: "Smith";                    
            }
        ];
    return authors;
}

问题:

  1. 创建对象初始化数组时,所有对象属性都需要值吗? 1a.如果是这种情况,开发人员通常会初始化类中的属性值吗?
  2. 有没有办法直接返回对象数组,类似于上面的 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/

相关文章:

javascript - 过滤嵌套对象数组

javascript - 在 PrimeFaces DataTable 中使用 SelectOneMenu 过滤排序列

javascript - 为什么我的内联 JS 破坏了我的 div 大小?

c - 如何在C中并行填充数组

Ruby 组合方法的 Python 等价物

typescript - Angular 2 在呈现应用程序之前加载数据

javascript - 样式为 :before and :after CSS 的互斥复选框

javascript - Android Web 控制台 Uncaught ReferenceError

Java arraycopy 二维数组的特定区域

javascript - Array.prototype 函数(.map()、.reduce() 等)更改 Angular 2+ 中模型变量的值