Empfohlene Vorgehensweise zum Implementieren von IteratorT in Typescript, vor ES6 [duplizieren]

8

Ich habe ein Projekt, das viele Klassen enthält, die idealerweise die Schnittstellen Iterable<T> und / oder Iterator<T> implementieren würden. Allerdings kann ich keine Standard-TypeScript-Definition dieser Schnittstellen finden (zum Beispiel in Typoskriptsammlungen oder einem ähnlichen Paket).

Ich verstehe, dass diese in ECMAScript 6 durch den Symbol.iterator -Mechanismus etwas standardisiert sind, aber mein Ziel ist ECMAScript 5 und wird es für die absehbare Zukunft bleiben.

Kann ich diese Schnittstellen irgendwie bekommen, ohne sie selbst zu definieren (zB für zukünftige Kompatibilität mit anderen Modulen)?

    
G. Alon 16.08.2016, 07:25
quelle

1 Antwort

4

Dies ist ein Duplikat von typescript: macht Klassenobjekte iterierbar , aber hier ist's eine Antwort auf ES5 :

Sie möchten ein Feature ES6 verwenden:

  

Ein Zusatz von ECMAScript 2015 (ES6) ist keine neue Syntax oder eine neue   eingebaut, aber ein Protokoll. Dieses Protokoll kann von jedem implementiert werden   Objekt unter Einhaltung einiger Konventionen.

     

Es gibt zwei Protokolle: das iterierbare Protokoll und den Iterator   Protokoll.

In einer ES5 -Umgebung (Kompilierung und / oder Laufzeit), und das können Sie nicht tun.
Wenn Sie das sagen, können Sie :

ganz nahe kommen
  

Ein Objekt ist ein Iterator, wenn es weiß, wie auf Elemente von a zugegriffen werden kann   Sammlung eins nach dem anderen, während sie ihre aktuelle Position im Auge behält   innerhalb dieser Sequenz. In JavaScript ist ein Iterator ein Objekt, das   stellt eine next () -Methode bereit, die das nächste Element in der Sequenz zurückgibt.   Diese Methode gibt ein Objekt mit zwei Eigenschaften zurück: done und value.

Sie können also einfach ein Objekt mit einer next Methode zurückgeben und es ist ein Iterator:

%Vor%

( Code im Spielplatz )

Die auskommentierten Teile funktionieren mit dem Ziel ES6 , aber nicht, wenn sie darunter liegen.
Aber wenn Ihre Laufzeitumgebung diese Funktion unterstützt, wird die kompilierte js die Arbeit gut machen.

    
Nitzan Tomer 16.08.2016, 12:32
quelle