【发布时间】:2020-04-01 16:13:49
【问题描述】:
我有一个从 JSON 文件(带有resolveJsonModule: true)导入的 JSON 对象。
对象如下所示:
"myobject": {
"prop1": "foo",
"prop2": "bar"
}
它的类型因此看起来像这样:
myobject: { prop1: string, prop2: string }
这很好,但是当我尝试使用 for...in 循环时,
for (const key in myobject) {
console.log(myobject[key])
}
我收到此错误:
TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ "prop1": string; "prop2": string; }'.
No index signature with a parameter of type 'string' was found on type '{ "prop1": string; "prop2": string; }'.
我了解这意味着迭代器 key 的类型为 string 而不是 'prop1' | 'prop2' 类型。但我不明白为什么迭代器没有得到这种类型,因为我明确地迭代了myobject 的属性名称。我是否错过了启用此行为的 tsconfig 属性?
我不想这样做:
for (const key in myobject) {
console.log(myobject[key as 'prop1' | 'prop2'])
}
因为:
- 将来我可能会添加新的属性;和
- 这似乎有点作弊,我觉得有更好的方法来做到这一点。
【问题讨论】:
-
由于这是一项您无法通过 for 循环访问它的项目,只需使用
myobject.prop1获取价值
标签: typescript for-in-loop object-property