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)?
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 :
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:
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.
Tags und Links javascript typescript interface iterator iterable