Inferência de tipo do Typescript dentro de um loop for
Isso parece um problema com o compilador TypeScript, mas não tenho certeza, talvez eu não entenda a inferência de tipos do TypeScript. Alguém pode explicar esse problema:
Eu tenho este código simples para fazer algo em uma lista de "TypeAs".. a variável "item" está recebendo o tipo "Any" quando é muito claro que a lista é do tipo "TypeA[]". Então, para ter segurança de tipo e intellisense, eu tenho que fazer um cast do tipo.
var list: TypeA[] = this.getListOfTypeAs();
for (var item in list) {
var typedItem = (<TypeA> item); //clearly a problem with typescript
Por quê?
Resposta #1
Como apontado por Zev e declarado na documentação:
A instrução
for..initera sobre as propriedades enumeráveis de um objeto, em ordem arbitrária.
No TypeScript 1.5+ você pode usar for...of para iterar sobre os elementos de um array:
var list: TypeA[] = this.getListOfTypeAs();
for (let item of list) {
// item is an element of list in here
}
Enquanto nas versões anteriores você podia usar um loop padrão for:
var list: TypeA[] = this.getListOfTypeAs();
for (var i = 0; i < list.length; i++) {
var typedItem = item[i];
}
Resposta #2
Porque o for...in do Javascript itera sobre os nomes das propriedades de um objeto/array, não sobre os valores das propriedades.
- Arrays no MDN
- Instrução for-in do TypeScript.
