【问题标题】:Angular 7+ error: 'the property is not available on type Object'Angular 7+ 错误:“该属性在对象类型上不可用”
【发布时间】:2019-07-03 16:34:56
【问题描述】:

我正在使用服务向 API 发出简单的 HTTP get 请求,并且请求成功。我取回了一个带有属性及其值的对象,当我订阅并记录响应时,一切似乎都正常。如果我然后尝试访问响应上的属性,例如(console.log(response.title),我会收到一个错误,即该属性在对象上不可用。我奇怪的是这些属性被定义为响应对象。如果我忽略错误,程序将编译并在 Localhost 上提供服务,并将给出错误的相同属性记录到控制台。我什至使用相同的属性在 DOM 中输出文本,它被渲染但仍然显示错误它在响应对象的所有属性上执行此操作。这是一个错误还是我遗漏了什么?我不想更改响应,因为它已经是一个正是我想要的对象。

【问题讨论】:

  • 你能添加一个 stackblitz 演示或代码以更好地理解。
  • 您可能正试图读取responsesubscribe 块之外的属性。如果确实如此,请阅读此线程上的my answer
  • 我在 subscribe 块中做所有事情,并且值实际上被记录在控制台中

标签: angular typescript


【解决方案1】:

对我来说奇怪的是属性被定义为响应对象的一部分。

没关系。您得到的错误是 TypeScript 静态错误。在编译时,TypeScript 不知道 API 响应的形状。你可以告诉它:你在哪里有你的http.get(//...args),指定:http.get</* type declaration here */>(//... args),甚至http.get<any>//... 应该可以解决问题。

您也可以在消费期间这样做:例如console.log((response as any).title)

这是你的 stackblitz 的一个分支:

https://stackblitz.com/edit/angular-ziheza?file=src%2Fapp%2Ftest.service.ts

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2022-07-02
    • 2022-07-23
    • 2021-04-02
    • 2020-08-07
    • 2018-07-16
    • 1970-01-01
    • 2012-12-10
    • 2018-11-04
    相关资源
    最近更新 更多