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

Red*_*ron 3 javascript typescript reactjs

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

bagTotal = (products) => {
 // function does stuff
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

bagTotal = (products: any[]) => {
 // function does stuff
}
Run Code Online (Sandbox Code Playgroud)

但这比我想要的要轻松一些:严格限制我的打字稿。

products 是一组外观相同的对象,就像所有对象都有名称,价格,描述一样。

我该怎么宣布呢?

我想做类似的事情

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

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

Ing*_*ürk 6

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

{name: string, price: number, description: string}[]
Run Code Online (Sandbox Code Playgroud)

您拥有的方式并不完全是错误的,但是还意味着其他的东西:这意味着一个数组中只有一个这种类型的项。


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

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

const products: Product[];
Run Code Online (Sandbox Code Playgroud)

  • 如果项目类型非常大,我建议使用 `Array<T>` 形式:`Array<{name: string, price: number, description: string}>` (2认同)

Dot*_*Bot 6

通用数组类型 提供Array<elemType>了一种声明对象数组的简单方法:

bagTotal = (products: Array<{name: string, price: number}>) => {
   ...
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

products: Product[];
Run Code Online (Sandbox Code Playgroud)

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

bagTotal = (products: Product[]) => {
 // function does stuff
}
Run Code Online (Sandbox Code Playgroud)

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

export class Product {
  name: String;
  price: Number;
  description: String;
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

谢谢你。