typescript - “for in”循环中 TypeScript 中“无索引签名”错误的原因
问题描述
为什么 TypeScript 4.1.3 抱怨循环中Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ bar: string; }'. No index signature with a parameter of type 'string' was found on type '{ bar: string; }'
的 foo[prop] 访问for in
,根据定义处理引用对象的属性?
自然,我可以摆脱将对象声明为any
,{[key: string]: any}
或类似的类型检查,但这将再次完全摆脱类型检查。
const foo = {
bar: 'bar'
};
for (const prop in foo) {
console.log(foo[prop]);
}
解决方案
出于某种原因,for..in
TS 中的循环只会遍历字符串,而不是遍历keyof obj
。
在这里,因为prop
只是一个string
,而不是'bar'
,它不能用于查找对象。
由于看起来您实际上并不关心键,而只关心值,因此直接迭代值:
for (const val of Object.values(foo)) {
console.log(val);
}
如果要一起迭代键及其关联值,请使用Object.entries
:
for (const [key, val] of Object.entries(foo)) {
console.log(key, val);
}
推荐阅读
- git - 通过“git push --force -u origin master”清除 bitbucker 存储库时出现“存储库处于只读模式”错误
- angular - 在 kendo-timepicker 中设置间隔
- html - 是否可以预览 Angular 模板?
- python - 熊猫改变数据格式
- jsp - “FileHandling.copyFile”是 Java 1.4 中不推荐使用的方法吗?
- typescript - 添加新数据行时停止跳到 AG-Grid 中的下一行
- r - 如何调整轴 fviz_pca 的尺寸
- python - 如何从字典字符串中打印特定键。
- javascript - 如何在里面增加一个数字
单击时在 html 中
- java - 使用java在幻灯片中创建段落项目符号