【发布时间】:2021-06-28 18:07:48
【问题描述】:
我有一个接口,它是作为来自外部库的几个其他接口的扩展而创建的:
interface LabeledProps extends TextProps, ComponentProps {
id: string;
count: number;
...
}
在代码的另一个地方,我有一个LabeledProps 类型的对象,我想遍历它的所有属性:
function myFunc(props: LabeledProps):void {
for (let key in props) {
const val = props[key]; // <-- ERROR IS HERE
// do other stuff
}
}
const val = props[key] 行会引发打字稿错误(尽管编译后的代码实际上运行良好):
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'LabeledProps'.
实现此目的的正确方法(或方法)是什么?谢谢!
(注意:我知道我可以将[key: string]: any 添加到接口定义中,这将删除错误消息,但我想要一个实际的修复,而不仅仅是隐藏错误的修复.)
【问题讨论】:
-
不能使用
let key:any in props? -
不,因为“for...in 语句的左侧不能使用类型注释”
-
使用
for ... in进行迭代的常见模式是:let key: keyof (typeof obj); for (key in obj) ... -
@aleksxor 谢谢,成功了!
标签: javascript typescript for-loop