【问题标题】:how do you declare an array of objects inside typescript?你如何在打字稿中声明一个对象数组?
【发布时间】:2019-05-26 15:25:47
【问题描述】:

我想指定一个将对象数组作为参数的函数,但我没有为对象定义特定类型(一种“匿名类型”)

bagTotal = (products) => {
 // function does stuff
}

我知道我可以这样做:

bagTotal = (products: any[]) => {
 // function does stuff
}

但这比我想要的要轻松一点:严格使用打字稿。

products 是一个外观相同的对象的数组;所有对象都有名称、价格和描述。

我该如何声明?

我想做类似的事情

bagTotal = (products: [{name: string, price: number, description: string}]) => {
 // function does stuff
}

但这是不对的。我该如何声明?

【问题讨论】:

  • 为什么说不对?
  • 您的解决方案创建了一个元组,该元组由具有给定接口的对象组成。

标签: javascript reactjs typescript


【解决方案1】:

你快到了,括号的位置是错误的:

{name: string, price: number, description: string}[]

你拥有它的方式并没有完全错误,但它意味着别的东西:它意味着一个数组,其中只有一个这种类型的项目。


我还建议将其提取到接口中,这样可以使类型可重用并且更易于阅读:

interface Product {
    name: string;
    price: number;
    description: string;
}

const products: Product[];

【讨论】:

  • 如果项目类型非常大,我建议使用Array<T> 表单:Array<{name: string, price: number, description: string}>
  • 我刚刚补充说,我实际上会为它提取一个类型;)
  • @IngoBürk 我稍微编辑了我的问题。请参见。如果您回答,我可以接受您的回答,谢谢
  • 您界面中的@Red Baron products 仍然没有类型,那有什么意义呢?我也在回滚那个编辑。请不要在收到答案后从根本上改变问题。你问了一个问题,它已经被回答了。对于新问题,请打开一个新问题。
  • 好的,我会在它允许时打开一个新问题并接受这个问题。谢谢
【解决方案2】:

我认为你必须声明“Product”类,这样你才能声明一个 Product 数组,如下所示:

products: Product[];

并将其作为参数传递,如下所示:

bagTotal = (products: Product[]) => {
 // function does stuff
}

要拥有该课程,您可以使用以下代码创建一个新的 .ts 文件:

export class Product {
  name: String;
  price: Number;
  description: String;
}

希望对您有所帮助!

谢谢。

【讨论】:

    【解决方案3】:

    如果您要声明一个特定对象的数组,并希望为对象中的变量指定类型,我会为该对象创建一个类,如下所示:

    class Item(){
        name: string;
        description: string;
        etc: any
    
      constructor() {
        this.name;
        this.description;
        this.etc;
    }}
    

    然后可以将数组指定为item对象的数组:

    itemArray: Array<Item>;
    

    【讨论】:

      【解决方案4】:

      generic array typeArray&lt;elemType&gt; 提供了一种简单的方式来声明对象数组:

      bagTotal = (products: Array<{name: string, price: number}>) => {
         ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 2017-06-25
        • 2013-01-22
        • 2016-08-12
        • 2020-01-08
        • 2021-01-20
        相关资源
        最近更新 更多