【问题标题】:Property 'xxx' does not exist on type '{}'类型“{}”上不存在属性“xxx”
【发布时间】:2018-12-24 21:44:38
【问题描述】:

我今天在我的 Angular 应用程序中遇到了一个奇怪的行为。

ERROR in src/main(A,B): error TS2339: Property 'XXX' does not exist on type '{}'.

错误发生在以下代码行

xxx.subscribe(data => {
    this.var = data.XXX
});

所以基本上我订阅了一个 observable 并将数据从 observable 映射到一个全局变量。我的角度应用程序按预期工作,所以这个错误似乎对应用程序本身没有影响,但我仍然无法弄清楚这里有什么问题。下面是data的控制台日志:

console.log(data)
//{"XXX": "test"}

【问题讨论】:

标签: javascript angular typescript observable


【解决方案1】:

Typescript 抱怨您在数据中没有该属性,您可以使用任何属性或使用该属性创建接口,

xxx.subscribe((data:any) => {...}

【讨论】:

  • 感谢您的回复,这个案例的最佳做法是什么?
  • 为此使用接口
  • @Sajeetharan 感谢您的回复,投了赞成票。另一方面,链接上的示例不清楚。您能否在答案中添加一个示例?
【解决方案2】:

您已经将数据实例化为一个对象示例:data = {}。 由于对象没有 XXX 属性,因此会出现此错误。 所以解决方案是data: {XXX: string, YYY: number ....} = {}

否则,您可以使用data['XXX'] 访问 XXX,这是最简单的选择

【讨论】:

  • data['XXX']应该是这里的答案。不需要接口、模型或特定类型。将这些东西用于一个简单的对象绝对没有任何好处。如果需要,可以将 data 重命名为更具体的数据类型。
  • 是的,您可以通过这种方式实现所需的行为。但作为最佳实践,最好使用接口之类的东西。否则你将很少能得到 Typescript 的真正好处。
  • 作为最佳实践,不要首先返回具有一个属性的数据对象类型。直接返回属性。
猜你喜欢
  • 2020-05-08
  • 2018-12-04
  • 2020-11-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2017-07-28
相关资源
最近更新 更多