Index-Signaturen und Record
Wählen Sie zwischen Index-Signaturen und dem Utility-Typ Record.
Index-Signaturen und Record ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Zwei Möglichkeiten, eine Map zu typisieren
TypeScript bietet zwei gängige Möglichkeiten, ein Dictionary zu beschreiben: eine Index-Signatur wie { [k: string]: V } und den integrierten Utility-Typ Record<K, V>. Beide überschneiden sich stark, lesen sich aber unterschiedlich.
Der Utility-Typ Record
Record<K, V> erstellt einen Objekttyp, dessen Schlüssel K und dessen Werte V sind. Mit string als Schlüsseltyp ist er gleichbedeutend mit einer string-Index-Signatur.
type Scores = Record<string, number>
const game: Scores = { alice: 10, bob: 7 }
console.log(game.alice)Gleichwertig mit einer Index-Signatur
Diese beiden Typen beschreiben dieselbe Struktur. Record<string, number> und { [key: string]: number } sind für beliebige String-Schlüssel austauschbar.
type A = Record<string, number>
type B = { [key: string]: number }
const a: A = { x: 1 }
const b: B = a // assignable both ways
console.log(b.x)Record mit einer Union von Literalschlüsseln
Die eigentliche Stärke von Record zeigt sich bei einer endlichen Union von Literalschlüsseln. Dadurch entsteht ein Objekt, bei dem jeder aufgeführte Schlüssel erforderlich ist – etwas, das eine Index-Signatur nicht ausdrücken kann.
type Role = "admin" | "editor" | "viewer"
type Perms = Record<Role, boolean>
const p: Perms = { admin: true, editor: true, viewer: false }
console.log(p.admin)Fehlende Schlüssel werden erkannt
Da jeder Literalschlüssel erforderlich ist, führt das Vergessen eines Schlüssels zu einem Compile-Fehler. Das ist eine starke Garantie, die Index-Signaturen nicht bieten können.
type Role = "admin" | "editor" | "viewer"
// const bad: Record<Role, boolean> = { admin: true, editor: true }
// Error: property viewer is missingEine Index-Signatur erlaubt jeden Schlüssel
Im Gegensatz dazu ist eine Index-Signatur offen. Sie können Schlüssel hinzufügen, die nirgendwo erwähnt werden, und kein Schlüssel muss vorhanden sein.
type Open = { [key: string]: number }
const o: Open = {} // no keys required
o.anything = 1 // any key allowed
console.log(o.anything)Endliche Schlüsselmengen: Record bevorzugen
Wenn die Schlüssel eine bekannte, endliche Menge bilden, ist Record mit einer Literal-Union übersichtlicher und sicherer. Es dokumentiert genau, welche Schlüssel vorhanden sind, und erzwingt Vollständigkeit.
type Direction = "north" | "south" | "east" | "west"
type Moves = Record<Direction, number>
const m: Moves = { north: 1, south: 0, east: 2, west: 0 }
console.log(m.east)Offene Schlüsselmengen: Beides funktioniert
Wenn die Schlüssel unbeschränkt sind und zur Laufzeit ermittelt werden, funktionieren sowohl Record<string, V> als auch eine Index-Signatur. Viele Teams wählen Record wegen der Kürze, andere bevorzugen die explizite Signatur.
type Cache1 = Record<string, string>
type Cache2 = { [url: string]: string }
const c: Cache1 = {}
c["/home"] = "<html>"
console.log(c["/home"])Record ist einfach ein gemappter Typ
Intern ist Record<K, V> als gemappter Typ definiert: { [P in K]: V }. Das erklärt, warum eine Literal-Union zu erforderlichen Schlüsseln führt, während string eine Index-Signatur ergibt.
// lib definition (simplified):
// type Record<K extends string | number | symbol, V> = { [P in K]: V }
type Flags = Record<"a" | "b", boolean>
const f: Flags = { a: true, b: false }
console.log(f.a)Benannte Schlüssel plus Auffangschlüssel
Eine Index-Signatur kann einen Auffangschlüssel mit festen Schlüsseln in einem Interface kombinieren – praktisch, wenn Sie beides benötigen. Record allein kann erforderliche benannte Schlüssel nicht ebenso unkompliziert mit einem offenen Auffangschlüssel kombinieren.
interface Response {
status: number
[header: string]: number | string
}
const r: Response = { status: 200, "x-id": "abc" }
console.log(r.status)Die praktische Wahl
Als Faustregel gilt: Endliche, bekannte Schlüssel → Record<Union, V> für eine Vollständigkeitsprüfung. Unbeschränkte Schlüssel → beide Formen sind geeignet. Benötigen Sie benannte Schlüssel plus einen Auffangschlüssel → verwenden Sie eine Index-Signatur innerhalb eines Interfaces.
type Status = "ok" | "error"
type Messages = Record<Status, string>
const msg: Messages = { ok: "done", error: "failed" }
console.log(msg.ok)Schnelltest
Testen Sie Ihr Verständnis von Record und Index-Signaturen.
Zusammenfassung
Record<string, V> entspricht einer string-Index-Signatur. Ein Record mit einer Literal-Union als Schlüsseltyp macht jedoch jeden aufgeführten Schlüssel erforderlich und erkennt fehlende Schlüssel bereits zur Compile-Zeit. Verwenden Sie Record<Union, V> für endliche, bekannte Schlüsselmengen, beide Formen für unbeschränkte Schlüsselmengen und eine Index-Signatur, wenn Sie benannte Schlüssel plus einen Auffangschlüssel benötigen. Intern ist Record der gemappte Typ { [P in K]: V }.
Häufig gestellte Fragen
Ist die Lektion „Index-Signaturen und Record“ kostenlos?
Ja — der vollständige Text von „Index-Signaturen und Record“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Index-Signaturen und Record“?
Wählen Sie zwischen Index-Signaturen und dem Utility-Typ Record. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um TypeScript Academy zu starten?
Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Index-Signaturen und Record“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?
Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Index-Signaturen definieren
- String- und Number-Index-Signaturen
- Bekannte und dynamische Schlüssel kombinieren
- Index-Signaturen und Record