在名为test.ts
的文件中给出以下代码:
interface ImageFile {
width: number;
height: number;
url: string;
}
interface ImageFiles {
low: ImageFile;
medium?: ImageFile;
high?: ImageFile;
}
let images: ImageFiles = {
low: {
width: 0,
height: 0,
url: 'bla'
}
};
Object.keys(images).forEach((k) => {
let img = images[k];
// do something with img
});
使用--noImplicitAny选项进行编译时出现以下错误:
$ tsc test.ts --noImplicitAny
test.ts(22,10): error TS7017: Index signature of object type implicitly has an 'any' type.
意味着images[k]
类型隐式具有any
类型,并且类型转换在此处不起作用。
没有--noImplicitAny
标志的编译工作正常。
如果设置了上面的标志,我怎样才能正确地遍历对象?
答案 0 :(得分:4)
TypeScript编译器无法推断images[k]
的正确类型,以及它抱怨的原因。正如您所发现的,类型转换并不能解决问题。
相反,您可以使用index signature告诉编译器ImageFiles
对象的所有属性都是ImageFile
类型:
interface ImageFiles {
[key: string]: ImageFile;
low: ImageFile;
medium?: ImageFile;
high?: ImageFile;
}