Der TypeScript-Record-Typ, erklärt mit deinen eigenen Keys

TypeScript-Record-Typ

TypeScript Record<K, V>: typisierte Lookup-Objekte erklärt | We.Inc

Baue einen Record<K, V>-Typ aus deinen eigenen Keys und sieh das Objekt, das er beschreibt. Lerne, wann Record besser ist als eine Index-Signatur oder eine Map, und welche Fehler er abfängt.

Record<K, V> ist ein eingebauter Utility-Typ für ein Objekt, dessen Keys aus K stammen und dessen Werte alle den Typ V haben. Gibst du ihm eine Union aus String-Literalen, besteht der Compiler darauf, dass jeder aufgeführte Key vorhanden ist. Gibst du ihm einfach string, verhält er sich wie ein offenes Dictionary, genau wie eine Index-Signatur.

Record auf einen Blick

Tippe die gewünschten Keys ein und wähle einen Werttyp. Der Builder schreibt den Record-Typ, den einfachen Objekttyp, zu dem er sich auflöst, und ein Startobjekt mit einer Zeile pro Key. So siehst du genau, worauf dich der Compiler festlegt, bevor du es in deinen Code einfügst.

Häufige Fragen

Ist Record dasselbe wie eine Index-Signatur?

Mit einem breiten Key wie string, ja: Record<string, number> und { [key: string]: number } beschreiben dieselbe Form. Der Unterschied zeigt sich bei Literal-Keys. Eine Index-Signatur kann nicht verlangen, dass bestimmte Namen existieren, während Record<"a" | "b", number> sowohl a als auch b verlangt.

Wann sollte ich eine Map statt eines Records verwenden?

Verwende eine Map, wenn Keys oft hinzugefügt und entfernt werden, wenn Keys keine Strings sind oder wenn du die Anzahl der Einträge über size brauchst. Verwende einen Record für eine feste Menge an Namen, für Konfigurationsobjekte und für alles, was du durch JSON.stringify schickst.

Warum sagt TypeScript, dass in meinem Record eine Property fehlt?

Weil der Key-Typ eine Union ist und das Objekt ein Mitglied auslässt. tsc meldet zum Beispiel Property 'about' is missing in type '{ home: string; }'. Füge den Key hinzu oder hülle den Typ in Partial, wenn das Weglassen zulässig ist.

Existiert Record zur Laufzeit?

Nein. Es ist nur ein Typ und verschwindet beim Kompilieren. Das Objekt, das du erstellst, ist ein ganz normales JavaScript-Objekt, daher kann der Compiler nicht verhindern, dass eine Serverantwort zusätzliche oder fehlende Keys hat.

Mit welcher TypeScript-Version kam Record?

Record kam mit TypeScript 2.1, zusammen mit Partial, Readonly und Pick, daher hat ihn jeder aktuelle Compiler.

Wie Record aufgebaut ist

Geschlossene und offene Keys

Record, Index-Signatur oder Map

Muster, die du am häufigsten brauchst

Keys aus einem as const-Array

Das Array ist die einzige Quelle der Wahrheit. Fügst du ihm einen Status hinzu, zeigt der Compiler auf die Label-Tabelle, bis du auch das Label ergänzt.

Ein Flag pro Feld eines anderen Typs

keyof macht aus einem bestehenden Typ die Key-Union, daher listet das touched-State-Objekt eines Formulars immer dieselben Felder wie das Formular.

Ein offenes Dictionary, sicher gelesen

Mit aktiviertem noUncheckedIndexedAccess ist ein Lesezugriff über einen berechneten Key number | undefined, daher ist der Fallback Pflicht und wird nicht vergessen.

Record-Typ-Builder

Keys, durch Kommas getrennt

Werttyp

Keys sind optional (in Partial hüllen)

Der Typ

Wozu er sich auflöst

Ein Startobjekt

Tippe mindestens einen Key ein. Keys müssen mit einem Buchstaben, _ oder $ beginnen.

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap