如何插入对象数组作为对象数组参数的参数

时间:2018-02-12 18:21:18

标签: arrays typescript

  

我缩短了我的模型和方法,但它代表了两种方式   我目前的问题。

     

型号:

export class OrdersModel {
      constructor(public items: [{
                    itemName: string,
                    sellerUsername: string,
                    price: string,
                    image: string,
                    itemId: string,
                    cartId?: string
                  }]) {
      }
    }
  

方法:

  checkOut() {
    let orderItems = [];
    for (let item of this.items) {
      orderItems.push({
        itemName: item[0].itemName,
        sellerUsername: item[0].sellerUsername,
        price: item[0].price,
        image: item[0].image,
        itemId: item[0].itemId
      });
    }
    const order = new OrdersModel(
      orderItems
    );
    this.userProfileService.addToOrders(order)
      .subscribe(
        data => {
          console.log(data);
        },
        error => console.error(error)
      );
  }
  

我正在尝试向订单添加多个商品。所以我的方式   构造我的模型是有一个对象(项)数组,然后   将项目存储为数据库中的对象数组。所以我正在努力   循环遍历我当前的项目数组(要添加到项目中的项目)   ()),并将它们添加到我的Orders模型。如果有一个更简单的方法   这样做,请告诉我。但这是我目前的想法   将项目数组(购物车项目)添加到订单模型中。这是   使用时我的orderItems错误是方法中的参数   退房():

Argument of type any[] is not assignable to parameter of type `[{
              itemName: string,
              sellerUsername: string,
              price: string,
              image: string,
              itemId: string,
              cartId?: string
            }]`
` Proper ‘0’ is missing in type any[]
  

我明白基本上我不能分配我拥有的数组类型,但我不确定如何修复它。

1 个答案:

答案 0 :(得分:0)

问题是构造函数的参数不是数组,它实际上是元组,而元组的大小是固定的。通常:[type] - 包含一个类型为typetype[]类型的数组的元组。您可以阅读有关元组here

的更多信息
 constructor(public items: {
              itemName: string,
              sellerUsername: string,
              price: string,
              image: string,
              itemId: string,
              cartId?: string
            }[]) {
}

注意我会改变您的设计以使用命名界面,以便您也可以正确键入orderItems

interface OrdersItemModel{
    itemName: string,
    sellerUsername: string,
    price: string,
    image: string,
    itemId: string,
    cartId?: string
}
export class OrdersModel {
    constructor(public items: OrdersItemModel[]) {
    }
}

function checkOut() {
    let orderItems: OrdersItemModel[] = [];
    for (let item of this.items) {
    orderItems.push({
        itemName: item[0].itemName,
        sellerUsername: item[0].sellerUsername,
        price: item[0].price,
        image: item[0].image,
        itemId: item[0].itemId
    });
    }
    const order = new OrdersModel(
    orderItems
    );
}