TypeError: Iterator/AsyncIterator constructor can't be used directly
Der JavaScript-Fehler "Iterator-Konstruktor kann nicht direkt verwendet werden" oder "AsyncIterator-Konstruktor kann nicht direkt verwendet werden" tritt auf, wenn versucht wird, die Iterator()- oder AsyncIterator-Konstruktoren direkt zu verwenden, um Instanzen zu erstellen. Diese Konstruktoren sind abstrakte Klassen und sollten nur vererbt werden.
Nachricht
TypeError: Abstract class Iterator not directly constructable (V8-based) TypeError: Iterator constructor can't be used directly (Firefox) TypeError: Iterator cannot be constructed directly (Safari) TypeError: Abstract class AsyncIterator not directly constructable (V8-based) TypeError: AsyncIterator constructor can't be used directly (Firefox) TypeError: AsyncIterator cannot be constructed directly (Safari)
Fehlertyp
TypeError
Was ist schiefgelaufen?
Die Iterator- und AsyncIterator-Konstruktoren sind abstrakte Klassen und sollten nicht direkt verwendet werden. Sie überprüfen den Wert von new.target und werfen einen Fehler, wenn dies derselbe ist wie der Konstruktor selbst. Die einzige Möglichkeit, diese Konstruktoren zu verwenden, besteht darin, von ihnen in einer Unterklasse zu erben und super() im Konstruktor der Unterklasse aufzurufen. Die Unterklasse muss auch eine next()-Methode definieren, um nützlich zu sein.
Beispiele
>Ungültige Fälle
new Iterator();
Gültige Fälle
class MyIterator extends Iterator {
#step;
#end;
constructor(start, end) {
// Implicitly calls new Iterator(), but with a different `new.target`
super();
this.#step = start;
this.#end = end;
}
next() {
if (this.#step >= this.#end) {
return { done: true };
}
return { value: this.#step++, done: false };
}
}
new MyIterator();