Schleifen in TypeScript und die Typen, die sie dir geben

Schleifen in TypeScript

Schleifen in TypeScript: for...of, for...in, forEach und Typen | We.Inc

Sieh, welchen Typ TypeScript der Schleifenvariable in for, for...of, for...in und forEach gibt, warum obj[key] in for...in scheitert und wie du Objekte und Maps sicher durchläufst.

TypeScript hat dieselben Schleifen wie JavaScript: for, for...of, for...in, while, do...while und die Array-Methode forEach. Neu ist ein Typ für jede Schleifenvariable. for...of liefert den Elementtyp, for...in liefert immer String-Schlüssel, und forEach übergibt den Elementtyp an sein Callback, das nicht vorzeitig abbrechen kann.

Der Typ der Schleifenvariable

Wähle ein Szenario, um den Code zu sehen, den Typ, den der Compiler der Schleifenvariable zuweist, und was die Schleife bei der Ausführung ausgibt. Zwei davon sind absichtlich Compilerfehler, denn bei genau diesen Schleifen bleiben die meisten in TypeScript hängen.

Häufige Fragen

Warum ist der Schlüssel in einer for...in-Schleife ein String?

for...in besucht aufzählbare String-Schlüssel, auch solche, die über die Prototypkette geerbt sind, und TypeScript kann zur Laufzeit zusätzliche Schlüssel an einem Objekt nicht ausschließen. Den Schlüssel als keyof T zu typisieren wäre ein Versprechen, das die Sprache nicht halten kann, also bleibt er string.

Wie behebe ich "Element implicitly has an 'any' type because expression of type 'string' can't be used to index"?

Wechsle zu Object.entries(obj), um Schlüssel und Werte zusammen zu bekommen, oder caste die Schlüssel einmal: for (const k of Object.keys(obj) as (keyof typeof obj)[]). Caste nur, wenn du weißt, dass das Objekt keine zusätzlichen Schlüssel hat.

Kann ich in TypeScript aus forEach ausbrechen?

Nein. Wie in JavaScript stoppt forEach nur, wenn das Callback eine Exception wirft. Nutze for...of mit break oder some() und find(), die beim ersten Treffer anhalten.

Funktioniert for...of in TypeScript mit einer Map?

Ja, mit einem Ziel von ES2015 oder höher. Jeder Durchlauf liefert ein [key, value]-Paar, typisiert aus den Generics der Map. Für ältere Ziele aktivierst du downlevelIteration.

Welchen Typ hat der Zähler einer klassischen for-Schleife?

let i = 0 wird als number inferiert, und a[i] liefert den Elementtyp. Mit aktiviertem noUncheckedIndexedAccess wird a[i] zum Elementtyp oder undefined, was strenger, aber näher an der Wahrheit ist.

Die Schleifen sind JavaScript, die Typen sind das Neue

Objekte ohne Fehler durchlaufen

Eingrenzen innerhalb einer Schleife

Schleifen und asynchroner Code

Mit for...of eins nach dem anderen awaiten

Jede Anfrage wartet auf die vorherige. Das Ergebnis-Array ist aus dem Rückgabetyp der Funktion typisiert.

Mit Promise.all alle gleichzeitig ausführen

map startet jede Anfrage auf einmal, und Promise.all wartet auf alle. Die Reihenfolge der Ergebnisse entspricht der Reihenfolge der ids.

for...of über Array

s: number

Der Elementtyp von number[] fließt direkt in die Schleifenvariable.

for...in über Objekt

k: string

Der Schlüssel ist ein einfacher String, ein typisiertes Objekt damit zu indexieren scheitert also im Strict Mode.

Object.entries

name: string, price: number

Object.entries gibt hier [string, number][] zurück, beide Hälften des Paars sind also typisiert.

Schlüssel als keyof

k: "tea" | "cake"

Ein einmaliger Cast sagt dem Compiler, dass die Schlüssel genau die deklarierten sind. Nur sicher, wenn das Objekt keine zusätzlichen Schlüssel haben kann.

for...in über Array

i: string

Array-Indizes kommen in for...in als Strings an, die Zuweisung an eine number-Variable scheitert also.

for...of über Map

item: string, qty: number

Die Destrukturierung des Eintrags liefert beide generischen Typen, in der Reihenfolge, in der die Einträge zuerst hinzugefügt wurden.

forEach über Tupel

x: string | number

forEach sieht ein Tupel als Array der Union seiner Elementtypen, grenze also mit typeof ein.

Liste mit as const

as const behält die Literalwerte, die Schleifenvariable ist also eine Union, über die du vollständig per switch verzweigen kannst.

Welchen Typ bekommt die Schleifenvariable?

Schleifenszenario auswählen

Typ:

Ausgabe

Compilerfehler von tsc

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap