如何设置对象属性不在同一个地方?

时间:2017-09-11 20:44:39

标签: javascript angular typescript typescript-typings

我有一些模特,让我们说:

export interface Car {
  driverId: string;
  driverName: string;
  color: string;
}

在我的函数中,我想从这个模型中返回一个对象数组,但是我只能在这个函数中发生的几个异步调用之后构建它,所以我想声明这个模型的空数组并分配我拥有它们的相关属性:

  public getListOfCarObjects(): Car[]  {
    let listOfCars: Car[] = [];
    self._serviceOne.getIds().subscribe(
      (res: DriversInfo) => {
        res.ids.map((id: string, idIndex: number) => {
          listOfCars[idIndex].driverId = id;
          // more stuff api calls below and building the object
          ...
  }

但我得到了这个错误:

  

错误类型错误:无法设置未定义的属性“driverId”

我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:2)

您必须在要引用的索引处创建对象实例。您可以在接收数据时创建它,方法是按下值或按索引设置它:

listOfCars.push({ driverId: id, dirverName: "", color: "" });
listOfCars[idIndex] = { driverId: id, dirverName: "", color: "" };

由于您的接口指定需要所有属性,因此您必须在创建新对象时全部指定它们,如上所述。如果您只使用anid创建Cars的内容,则可以将其余属性标记为可选:

export interface Car {
  driverId: string;
  driverName?: string;
  color?: string;
}