在angular typescript中创建对象数组时出错

时间:2018-05-27 16:39:01

标签: javascript arrays angular typescript object

角度对象数组创建错误。 我想要表示的数据是以下形式:

stats : [
    {
        name : 'x', 
        age : 20
    },
    {
        name : 'y', 
        age : 10
    },
];

因此,在角度方面,我将其定义为:

stats: Array<{ name: string,  age : number }> = [];

所以当我尝试像这样分配一些东西时:

this.stats[0]['name'] = 'x';

这会引发错误:

  

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

ps:我不想要这个问题的替代解决方案,因为我需要这种表示和数据绑定我的工作。 并且,我也无法预定义'stats'数组,因为它内部的数据是动态的,我没有固定的大小。

2 个答案:

答案 0 :(得分:1)

stats: Array<{ name: string, age : number }> = [];

表示定义一个匿名对象数组,在数组的每个元素中都有一个名称和一个age属性。

分配&#39; x&#39;到你必须写的第一个索引的name属性:

this.stats[0] = { name: 'x', age: 10 };

如果您不想指定年龄,则必须将其定义为可选属性,如下所示:

stats: Array<{name: string, age?: number}> = [];

添加了问号。 不确定,但我相信定义一个命名对象并将数组声明为:

是一个好习惯
stats: Stat[];

至少我是如何学习它的。

答案 1 :(得分:0)

定义一个接口并在绑定它之前实例化你的对象

export class AppComponent  {

     stats:Array<Idata>=[];
     constructor(){
       this.stats[0]={name:'x',age:10}
       console.log(this.stats[0].name)
       console.log(this.stats[0].age)
     }

    }

    export interface Idata{
      name:string,
      age:number,
    }

绑定到输入字段

 <input type="text" [(ngModel)]="stats[0].name">

<强> Working StackBlitz