Record in TypeScript: Was es ist und wie ein Anfänger es nutzt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Record in TypeScript: Praxisnahe Erklärung

\n\n

Stellen Sie sich vor, Sie schreiben eine App zum Englischlernen. Sie müssen Übersetzungen speichern: cat → Katze, dog → Hund. Wie typisiert man das richtig in TypeScript? Man könnte ein Interface erstellen, aber was, wenn die Schlüssel nicht im Voraus bekannt sind? Oder es gibt zu viele? Hier kommt Record ins Spiel – einer der nützlichsten, aber oft unterschätzten Hilfstypen.

\n\n

In diesem Artikel erklären wir anhand realer Beispiele, was der Record-Typ in TypeScript ist – direkt anwendbar in Ihren eigenen Projekten. Keine langweilige Theorie, nur Praxis.

\n\n

Was ist Record in TypeScript? Einfach erklärt

\n\n

Record<K, V> ist ein eingebauter Hilfstyp, der ein Objekt erstellt, bei dem alle Schlüssel den Typ K und alle Werte den Typ V haben.
Stellen Sie es sich als typisiertes Wörterbuch oder Map mit einer festgelegten Menge von Schlüsseln vor.

\n\n

Die grundlegende Schreibweise sieht so aus:

\n\n
// Ein normales Objekt\nconst userRoles: Record<string, string> = {\n  admin: 'Administrator',\n  user: 'Benutzer',\n  guest: 'Gast'\n};
\n\n

Hier bedeutet Record<string, string>: „Ein Objekt, bei dem die Schlüssel Strings und die Werte ebenfalls Strings sind“. Einfach und verständlich.

\n\n

Warum ist Record besser als ein normales Interface?

\n\n
    \n
  • Flexibilität der Schlüssel: Sie können einen bestimmten Satz von Schlüsseln über einen Union-Typ festlegen.
  • \n
  • Kompaktheit: Sie müssen nicht jedes Feld manuell beschreiben.
  • \n
  • Sicherheit: TypeScript prüft, dass Sie nur erlaubte Schlüssel verwenden.
  • \n
\n\n

Record vs. einfaches Objekt: Ein anschauliches Beispiel

\n\n

Angenommen, wir haben Bestellstatus: pending, shipped, delivered. Ohne Record müssten wir ein Interface mit drei Feldern schreiben:

\n\n
interface OrderStatusMap {\n  pending: string;\n  shipped: string;\n  delivered: string;\n}\n\nconst statusDescriptions: OrderStatusMap = {\n  pending: 'Wartet auf Bearbeitung',\n  shipped: 'Versendet',\n  delivered: 'Geliefert'\n};
\n\n

Mit Record ist es kompakter und übersichtlicher:

\n\n
type OrderStatus = 'pending' | 'shipped' | 'delivered';\n\nconst statusDescriptions: Record<OrderStatus, string> = {\n  pending: 'Wartet auf Bearbeitung',\n  shipped: 'Versendet',\n  delivered: 'Geliefert'\n};
\n\n

Vorteil: Wenn Sie versuchen, cancelled zum Objekt hinzuzufügen, zeigt TypeScript sofort einen Fehler an – diesen Status gibt es nicht im Union-Typ.

\n\n

Top 5 praktische Anwendungsbeispiele für Record

\n\n

Schauen wir uns an, wo Record das Leben wirklich vereinfacht.

\n\n

1. App-Konfiguration

\n

Speichern Sie Einstellungen mit bekannten Schlüsseln, aber unterschiedlichen Wertetypen:

\n\n
type ConfigKeys = 'apiUrl' | 'timeout' | 'retryCount';\ntype ConfigValue = string | number | boolean;\n\nconst appConfig: Record<ConfigKeys, ConfigValue> = {\n  apiUrl: 'https://api.example.com',\n  timeout: 5000,\n  retryCount: 3\n};
\n\n

2. Mapping von Enums oder Konstanten

\n

Häufig muss man einen Code und seine lesbare Bezeichnung zuordnen:

\n\n
enum HttpStatus {\n  OK = 200,\n  NotFound = 404,\n  Error = 500\n}\n\nconst statusMessages: Record<HttpStatus, string> = {\n  [HttpStatus.OK]: 'Alles gut',\n  [HttpStatus.NotFound]: 'Nicht gefunden',\n  [HttpStatus.Error]: 'Serverfehler'\n};
\n\n

3. Formulare und Validierung

\n

Record eignet sich hervorragend zum Speichern von Validierungsfehlern pro Feld:

\n\n
type FormFields = 'email' | 'password' | 'name';\ntype ValidationErrors = Record<FormFields, string | null>;\n\nconst errors: ValidationErrors = {\n  email: 'Ungültige E-Mail',\n  password: null,\n  name: 'Name ist erforderlich'\n};
\n\n

4. Daten-Cache

\n

Simulation eines Caches mit ID-Schlüsseln:

\n\n
type UserI                

Blogs

Buchempfehlungen