Typescript对象迭代编译问题

时间:2016-01-02 18:22:52

标签: typescript

在名为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标志的编译工作正常。

如果设置了上面的标志,我怎样才能正确地遍历对象?

1 个答案:

答案 0 :(得分:4)

TypeScript编译器无法推断images[k]的正确类型,以及它抱怨的原因。正如您所发现的,类型转换并不能解决问题。

相反,您可以使用index signature告诉编译器ImageFiles对象的所有属性都是ImageFile类型:

interface ImageFiles {
    [key: string]: ImageFile;
    low: ImageFile;
    medium?: ImageFile;
    high?: ImageFile;
}