Pesquisa de site

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..in itera 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.

Artigos relacionados