在对象数组中指定对象的属性

时间:2019-10-16 06:58:44

标签: arrays angular typescript

我有一个看起来像这样的界面:

    export interface Stats {

    lastFiveResults: Object[];

}

对象数组看起来像这样:

(5) [{…}, {…}, {…}, {…}, {…}]
0: {idresults: 500, gold: 567740, mana: 305370, xp: 1800}
1: {idresults: 501, gold: 492381, mana: 602707, xp: 1450}
2: {idresults: 502, gold: 241012, mana: 303954, xp: 810}
3: {idresults: 503, gold: 415778, mana: 261254, xp: 810}
4: {idresults: 504, gold: 327266, mana: 427803, xp: 0}

当我尝试像这样访问它时

data.lastFiveMatches[0].gold

我得到Property gold does not exist on type object

所以我的问题是如何指定这些属性?

6 个答案:

答案 0 :(得分:1)

您应该创建接口ItemResultItem

export interface ResultItem {
  idresults: number;
  gold: number; 
  mana: number;
  xp: number;
}

export interface Stats {
  lastFiveResults: ResultItem[];
}

...然后:

data.lastFiveMatches[0].gold;

答案 1 :(得分:0)

您可以这样声明:

export interface Stat {
    idresults: number, 
    gold:  number, 
    mana:  number, 
    xp:  number
}

并初始化:

yourStats: Stat[]= [];

fooMethod() {    
    for (let i = 0; i<10; i++) {
        console.log('1');
        this.yourStats.push({idresults: i, gold: i, mana: i, xp: i})
    } 
    console.log(`Your stats is`, this.yourStats);    
}  

答案 2 :(得分:0)

您可以定义另一个接口来指定对象中属性的类型。

interface myObject {
  idresults: number,
  gold: number,
  mana: number,
  xp: number
}

export interface Stats {

    lastFiveResults: myObject[];

}

答案 3 :(得分:0)

export class Stats {
    lastFiveResults: Object[]=[{…}, {…}, {…}, {…}, {…}]
}

在您的ts文件中:

data= new Stats();
console.log(data.lastFiveMatches[0].gold)

答案 4 :(得分:0)

您可以在列表中为对象定义interfacetype

export interface Stats {
    lastFiveResults: MyObject[];
}

export interface MyObject {
  idresults: number
  gold: number
  mana: number
  xp: number
}

请参阅此playground

答案 5 :(得分:0)

尝试一下:

if (data.lastFiveMatches && data.lastFiveMatches.length > 0) {    
   const something = data.lastFiveMatches[0].gold || 0;
}