首页 > 解决方案 > 如何在打字稿中访问类型化的对象值

问题描述

我已经在谷歌上搜索了几个小时,但无法解决这个问题..

我有一个界面:

interface Alert {
  uuid: string,
  city: string,
  address: number
}

我想迭代一个对象,它肯定符合这个接口:

 const alerts: Alert[] = response.from.api.alerts

现在当我尝试做这样的事情时,我在 ts 编译器中得到一个错误:

for (const alert of alerts) {
 for(const field in alert) {
   // this shows an error: Element implicitly has an 'any' type... ts(7053)
   console.log(alert[field])
 }
}

访问警报对象值的正确方法是什么?

我应该使用类型保护或类似的东西吗?

我如何向打字稿声明该字段是警报的关键?

我应该禁用 noImplicitAny 标志 - >这被认为是“最佳实践”吗?

我知道这个问题已经被问过很多次了,但没有一个答案对我有帮助..

感谢您的帮助!

标签: typescript

解决方案


所以,我找到了一种方法来处理这个错误(ts.7053)。

首先,谢谢大家的帮助,但我相信我的问题具有误导性。正确的问题应该是 -> 如何在 for 循环中使用括号表示法访问类型化对象。

我创建了一个名为 Indexable 的新接口,如下所示:

export interface Indexable {
  [key: string]: any;
}

我的“警报”界面现在扩展了这个界面:

interface Alert extends Indexable {
  uuid: string,
  city: string,
  address: number
}

现在我可以对键入为“警报”的对象执行 for 循环而不会出现错误:

...
 for(const field in alert) {
   console.log(alert[field]
 }
...

推荐阅读