你如何在typescript中声明一个对象数组?

IT技术 javascript reactjs typescript
2021-04-13 01:19:49

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

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

我明白我可以这样做:

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

但这比我想要的要轻松一些:对typescript严格。

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

我怎么能声明呢?

我想做类似的事情

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

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

4个回答

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

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

您拥有它的方式并非完全错误,但它意味着其他含义:它意味着一个数组,其中仅包含一个此类项目。


我还建议将它提取到一个界面,它会使类型可重用并且更易于阅读:

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

const products: Product[];
@IngoBürk 我稍微编辑了我的问题。请参见。如果你回答,我可以接受你的回答,谢谢
2021-05-29 01:19:49
Array<T>如果项目类型非常大,我建议使用该表单:Array<{name: string, price: number, description: string}>
2021-06-07 01:19:49
您界面中的@Red Baron 产品仍然没有类型化,那么有什么意义呢?此外,我正在回滚该编辑。请不要在收到答案后从根本上改变问题。你问了一个问题,已经回答了。对于一个新问题,请打开一个新问题。
2021-06-19 01:19:49
我只是补充说我实际上会为它提取一个类型;)
2021-06-21 01:19:49
好的,当它也允许我时,我会打开一个新问题并接受这个问题。谢谢
2021-06-21 01:19:49

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

products: Product[];

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

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

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

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

我希望这有帮助!

谢谢你。

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

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

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

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

itemArray: Array<Item>;

通用阵列型 Array<elemType>提供了一种简单的方式来声明对象的数组:

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