2016-01-02 3 views
3

Учитывая следующий код в файл с именем 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 Флаг работает нормально.

Как правильно отрегулировать объект, когда установлен флаг выше?

ответ

4

Компилятор TypeScript не может вывести правильный тип для images[k], и именно поэтому он жалуется. Как вы обнаружили, тип casting не устраняет проблему.

Вместо этого, вы можете использовать index signature, чтобы сообщить компилятору, что все свойства ImageFiles объекта имеют тип ImageFile:

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

Это, кажется, ответ. Благодаря! – eAbi