2017-05-10 9 views
2

Ich habe folgende Code-Schnipsel wurde:Typoskript Iteratoren Spielplatz Fehler

var iterator: IterableIterator<string> = iterBreadth(tree); 
for(var item of iterator){ 
    log(item) 
} 

iterBreadth ist nur eine Generatorfunktion, die einen Iterator zurückgibt. Iteratoren in TypeScript sind vom Typ IterableIterator<T>, wobei T in meinem Fall ein string ist.

Meine Frage ist - warum ist der Spielplatz bei mir an der Linie for..of Iterator Schleife schreien:

enter image description here

?

Wie kommen Iteratoren nur zu Arrays und String?


Ich habe am official docs gefunden, daß, wenn ES3 oder ES5 Targeting nur Arrays in for..of Schleifen erlaubt sind. Aber das erklärt nicht, was Strings in der playground error-Message tun.


Außerdem kann ich sehen, dass Typoskript harte Zeit transpiling for..of ist mit. Der folgende Code scheint genau transpiled gegen Arrays werden, da es nur über Indizes Iterieren (0, 1, 2), nicht im nächsten Aufruf: mit der für/von Schleife

var iterator = iterBreadth(tree); 
for (var _i = 0, iterator_1 = iterator; _i < iterator_1.length; _i++) { 
    var item = iterator_1[_i]; 
    log(item); 
} 
+0

Sie müssen es 'es6' (oder höher) zielen, um dies zu können. Aber es scheint, dass du das schon weißt, also was fragst du genau? Warum wird das Ziel 'es6' benötigt? –

+0

@NitzanTomer Nein, die Frage betrifft die Fehlermeldung. Warum zeigt es 'string' an ?! Ich finde es irreführend. – ducin

Antwort

1

Sie können eine Zeichenfolge Zeichen iterieren:

const str = "str"; 
for (let char of str) { 
    console.log(char); 
} 

Ausgänge:

s
t
r

Das ist der Grund, warum die Fehlermeldung string lautet.

0

Nitzans Antwort deckt eine gute Lösung ab. Wenn aus irgendeinem Grund müssen Sie Ihre iterable als Array behandeln können Sie Array.from()

var iterator: IterableIterator<string> = iterBreadth(tree); 
for(var item of Array.from(iterator)){ 
    log(item) 
}