如何修复“错误类型错误:无法设置未定义的属性‘id’”

新手上路,请多包涵

当我尝试从 html 调用 getHistoryData() 时,出现错误“错误类型错误:无法设置未定义的属性‘id’”。

 export class Data {
    id : string ;
    fromTime : any ;
    toTime : any ;
    deviceType : string ;
    interval : any;
    params : string;
}



// payload : Data = {
  //   id : "00:12:4b:00:19:7b:27:7",
  //   fromTime: "1554422400000",
  //   toTime: "1554508799000" ,
  //   deviceType: "xxx",
  //   interval: "1199999",
  //   params: "temperature"
  // }

  payload : Data;

  response : any;

  generatePayload(){
    this.payload.id = "00:12:4b:00:19:7b:27:7",
    this.payload.fromTime = "1554422400000",
    this.payload.toTime = "1554508799000",
    this.payload.deviceType = 'xxx' ,
    this.payload.interval = 1000 ,
    this.payload.params = this.selectedParameter
  }

  getHistoryData(){
    this.generatePayload()
     this.historyDataService.getHistoryData(this.payload)
           .subscribe((data) => this.response = data)
  }

当我直接分配有效载荷对象的值时有效,如注释代码所示,但是当我尝试通过函数分配数据时它会抛出错误。

原文由 chink 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 310
2 个回答

在为它分配任何值之前,您需要使用对象初始化 payload 属性。

 payload : Data = {
  id : undefined,
  fromTime: undefined,
  toTime: undefined ,
  deviceType: undefined,
  interval: undefined,
  params: undefined
};

generatePayload(){
  this.payload.id = "00:12:4b:00:19:7b:27:7",
  this.payload.fromTime = "1554422400000",
  this.payload.toTime = "1554508799000",
  this.payload.deviceType = 'xxx' ,
  this.payload.interval = 1000 ,
  this.payload.params = this.selectedParameter
}

原文由 wentjun 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要将 this.payload 实例化为一个对象(作为打字稿,一个正确形状的对象),因为您只定义了一个类型。只需尝试使用新语法将 this.payload 实例化为 Data

  public payload: Data;

  generatePayload()
  {
    this.payload = new Data(); // will define an object with correct keys.

    this.payload.id = "00:12:4b:00:19:7b:27:7",
    this.payload.fromTime = "1554422400000",
    this.payload.toTime = "1554508799000",
    this.payload.deviceType = 'xxx' ,
    this.payload.interval = 1000 ,
    this.payload.params = this.selectedParameter
  }

原文由 Dince12 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题