Istruzione for-in TypeScript

I documenti TypeScript non dicono nulla di come loop for o for-in. Dal giocare con la lingua sembra che solo le variabili any o stringa siano supportate in loop for.

Perché questa decisione è stata presa?

Perché non usare le informazioni sul tipo e avere una variabile di iterazione di tipo forte?

L’istruzione for-in è davvero lì per enumerare le proprietà degli oggetti, che è il modo in cui è implementata in TypeScript. Ci sono alcuni problemi con l’utilizzo sugli array .

Non posso parlare a nome del team di TypeScript, ma credo che questo sia il motivo dell’attuazione nella lingua.

In Typescript 1.5 e for..of successive, puoi usare for..of invece di for..in

 var numbers = [1, 2, 3]; for (var number of numbers) { console.log(number); } 

TypeScript non ti sta dando una pistola per spararti ai piedi con.

La variabile iteratore è una stringa perché è una stringa , punto e basta . Osservare:

 var obj = {}; obj['0'] = 'quote zero quote'; obj[0.0] = 'zero point zero'; obj['[object Object]'] = 'literal string "[object Object]"'; obj[obj] = 'this obj' obj[undefined] = 'undefined'; obj["undefined"] = 'the literal string "undefined"'; for(var key in obj) { console.log('Type: ' + typeof key); console.log(key + ' => ' + obj[key]); } 

Quante coppie chiave / valore sono in obj ora? 6, più o meno? No, 3 e tutte le chiavi sono stringhe:

 Type: string 0 => zero point zero Type: string [object Object] => this obj; Type: string undefined => the literal string "undefined" 

modifica 2018 : Questo è obsoleto, js e typescript ora hanno for..of loop.
http://www.typescriptlang.org/docs/handbook/iterators-and-generators.html


Il libro “TypeScript Revealed” dice

“Puoi scorrere gli elementi di un array usando o for o for..in loops come mostrato qui:

 // standard for loop for (var i = 0; i < actors.length; i++) { console.log(actors[i]); } // for..in loop for (var actor in actors) { console.log(actor); } 

"

Risulta, il secondo ciclo non passa gli attori nel ciclo. Quindi direi che questo è assolutamente sbagliato. Purtroppo come sopra, i loop non sono stati modificati da typescript.

map e forEach spesso mi aiutano e sono dovute a miglioramenti dei dattiloscritti sulle definizioni delle funzioni più accessibili, lke nel momento stesso:

 this.notes = arr.map(state => new Note(state)); 

La mia lista dei desideri per TypeScript;

  1. Collezioni generiche
  2. Iterators (interfacce IEnumerable, IEnumerator sarebbe la cosa migliore)