【问题标题】:Interface property undefined when trying to set value?尝试设置值时未定义接口属性?
【发布时间】:2019-11-24 00:08:13
【问题描述】:

这是我的篮球运动员类和 ITeam 和 IStats 接口:

export class Player {
  id: string;
  firstName: string;
  lastName: string;
  position: string;
  team: ITeam;
  stat: IStats;

  get fullName(): string {
    return this.firstName + " " + this.lastName;
  }
}

export interface ITeam {
  id: string;
  abbreviation: string;
  name: string;
  city: string;
}

export interface IStats {
  GP: number;
  Min: number;
  FGM: number;
  FGA: number;
  TPM: number;
  TPA: number;
  FTM: number;
  FTA: number;
  OR: number;
  TR: number;
  AS: number;
  ST: number;
  TO: number;
  BK: number;
  PF: number;
  DQ: number;
  PTS: number;
  TC: number;
  EJ: number;
  FF: number;
  Sta: number;
}

当我在组件中循环访问我的数据时,当我尝试使用 ERROR TypeError: Cannot set property 'abbreviation' of undefined 设置 player.team.abbreviation 属性时出错

  createPlayer(playerArray) {
    let player: IPlayer = new Player();

    player.id = playerArray[0];
    player.firstName = playerArray[1];
    player.lastName = playerArray[2];
    player.team.abbreviation = playerArray[3];
...
    }

为什么 player.team 未定义?

【问题讨论】:

  • 向 Player 类添加一个构造函数,将 team 和 stats 属性实例化为属性期望形状的对象。如果不实例化这些属性,它们是未定义的。

标签: angular typescript class interface


【解决方案1】:

感谢 R.Richards,此更新现在有效:

export class Player {
  id: string;
  firstName: string;
  lastName: string;
  position: string;
  team: ITeam;
  stat: IStats;

  constructor() {
    this.team = {} as ITeam;
    this.stat = {} as IStats;
  }

  get fullName(): string {
    return this.firstName + " " + this.lastName;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多