如何在打字稿中声明对象数组?

时间:2018-12-28 21:57:14

标签: javascript reactjs typescript

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

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

我知道我可以这样做:

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

但是,这比我想要的放松了一点:严格输入我的打字稿。

products是一系列外观相同的对象,例如所有对象都有名称,价格,描述。

我该怎么声明?

我想做类似的事情

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

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

4 个答案:

答案 0 :(得分:3)

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

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

您拥有它的方式并不完全错误,但这意味着其他事情:它表示一个数组,其中只有一个这种类型的项。


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

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

const products: Product[];

答案 1 :(得分:1)

我认为您必须声明“ Product”类,以便可以这样声明Product数组:

products: Product[];

并将其作为这样的参数传递:

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

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

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

我希望能有所帮助!

谢谢。

答案 2 :(得分:0)

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

class Item(){
    name: string;
    description: string;
    etc: any

  constructor() {
    this.name;
    this.description;
    this.etc;
}}

然后您可以将数组指定为项目对象的数组:

itemArray: Array<Item>;

答案 3 :(得分:0)

这是使用 generic array type - Array<elemType>

声明它的清晰方法
bagTotal = (products: Array<{name: string, price: number, description: string}>) => {
   // function does stuff
}