函数中的Typescript错误将对象推送到数组

时间:2017-02-15 23:35:53

标签: javascript arrays angular typescript

我正在尝试将新对象推送到我的Angular 2应用程序中的数组,但我遇到了一个问题(我怀疑可能是一个打字稿类型的问题,虽然我不确定)。这就是我推动的阵列:

locations = [
  { city: 'Los Angelas', postalCode: '90001', coordinates: 2321 },
  { city: 'New York', postalCode: '10001', coordinates: 3432 },
];

这是我用来将新的zipcodes推送到数组的函数:

  addZipcode(event) {
    this.locations.push({ postalCode: this.newPostalCode });
    this.newPostalCode = '';
    this.addZipInput = false;
    event.preventDefault();
  }

我得到的错误:此功能是:

  

类型的论证' {postalCode:any; }'不能分配给参数   类型' {city:string; postalCode:string;坐标:数量; }&#39 ;.   物业' city'缺少类型' {postalCode:any; }'

我该如何处理这个问题?用户将推送邮政编码,而不是城市或坐标。我认为我可以将任何类型的对象推送到数组中,但似乎打字稿阻止了这一点。

2 个答案:

答案 0 :(得分:2)

TypeScript已将数组类型推断为{ city: string; postalCode: string; coordinates: number; }[],但您尝试推送{postalCode:string} - 这是错误。如果您仍想执行此操作,则需要为location设置适当的类型:

  location:any[]
  //or
  interface ILocation {
     city?:string;
     postalCode?:string;
     coordinates?:string;
  }
  location:ILocation[];

答案 1 :(得分:1)

您可以将locations声明为具有可选citycoordinates的对象数组:

type Loc = {city?: string; postalCode: string; coordinates?: number};

let locations: Loc[] = [
  { city: 'Los Angelas', postalCode: '90001', coordinates: 2321 },
  { city: 'New York', postalCode: '10001', coordinates: 3432 },
];