- 此问题在此处已有答案**:
(18个答案)
昨天关门了。
下面是一个简单的测试案例,来说明我正在与之斗争的问题:
const testCase = {a:{b:"result"}}
for (const i in testCase) {
console.log("i", i)
for (const j in testCase[i]){
console.log("j", j)
}
}
这将失败:
error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ a: { b: string; }; }'.
No index signature with a parameter of type 'string' was found on type '{ a: { b: string; }; }'.
5 for (const j in testCase[i]){
我可以通过将i
转换为keyof typeof testCase
来解决这个问题。
const testCase = {a:{b:"result"}}
for (const i in testCase) {
let typedIndex = i as keyof typeof testCase
console.log("i", i)
for (const j in testCase[typedIndex]){
console.log("j", j)
}
}
然而,这会变得很麻烦,这取决于我需要迭代多少个子对象?有没有更好的方法来处理这个问题,或者我只是在朝着一个反模式前进,即没有为testCase
预定义的形状。
1条答案
按热度按时间guicsvcw1#
我想我可能已经找到了答案,除非我显式地设置
testCase
的键是什么,否则它们根据定义就是any
,所以通过修改它来使用这样的接口:当我运行
for...in
循环时,它将知道返回的key
的类型。以下是完整版本: