TypeScript Academy · Lektion

Diskriminierte Unions für sicheres Pattern Matching

Fügen Sie den Mitgliedern einer Union ein gemeinsames Literal-Feld hinzu, um Typsicherheit zu gewährleisten.

Lektion 3 von 413 Schritte

Diskriminierte Unions für sicheres Pattern Matching ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Willkommen

Diskriminierte Union-Typen fügen den Union-Mitgliedern eine gemeinsame Literal-Eigenschaft hinzu. TypeScript verwendet diesen Diskriminator, um den Typ in switch- und if-Anweisungen einzugrenzen.

Die Diskriminator-Eigenschaft

Ein Diskriminator ist eine Eigenschaft mit einem eindeutigen Literal-Typ in jedem Union-Mitglied. TypeScript grenzt die Union anhand ihres Werts ein.
type Circle = { kind: 'circle'; radius: number };
type Square = { kind: 'square'; side: number };
type Shape = Circle | Square;

Eingrenzung mit if-Prüfungen

Prüfen Sie den Diskriminator in einer if-Anweisung. TypeScript grenzt den Typ auf das passende Mitglied ein.
function area(shape: Shape): number {
  if (shape.kind === 'circle') {
    return Math.PI * shape.radius ** 2;
  }
  return shape.side ** 2; // narrowed to Square
}

Eingrenzung mit switch/case

switch-Anweisungen funktionieren hervorragend mit diskriminierten Union-Typen. Jeder case-Zweig grenzt auf ein bestimmtes Mitglied ein.
function describe(shape: Shape): string {
  switch (shape.kind) {
    case 'circle': return `Circle r=${shape.radius}`;
    case 'square': return `Square s=${shape.side}`;
  }
}

Vollständigkeitsprüfung mit never

Fügen Sie einen default-Zweig hinzu, der den Wert `never` zuweist. Wenn Sie ein neues Union-Mitglied hinzufügen und dessen Behandlung vergessen, meldet TypeScript einen Fehler.
function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'square': return shape.side ** 2;
    default:
      const _exhaustive: never = shape;
      throw new Error('Unhandled shape');
  }
}

Result-Typ-Muster

Diskriminierte Union-Typen eignen sich ideal für das Result-Muster – Sie geben entweder Erfolgsdaten oder einen Fehler zurück, ohne eine Ausnahme auszulösen.
type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type Result<T> = Ok<T> | Err;

Action-Typ-Muster (Redux-Stil)

In Redux und ähnlichen Systemen sind Actions diskriminierte Union-Typen. Das Feld `type` ist der Diskriminator.
type Action =
  | { type: 'INCREMENT'; amount: number }
  | { type: 'DECREMENT'; amount: number }
  | { type: 'RESET' };

Mehrere Diskriminator-Eigenschaften

Ein Diskriminator muss nicht aus einer einzigen Eigenschaft bestehen – TypeScript kann anhand jeder Kombination von Prüfungen eingrenzen.
type AdminUser = { role: 'admin'; permissions: string[] };
type RegularUser = { role: 'user'; credits: number };
type User = AdminUser | RegularUser;

Auch nicht diskriminierte Unions werden eingegrenzt

Auch ohne Diskriminator grenzt TypeScript Unions mithilfe von typeof, instanceof und Eigenschaftsprüfungen ein.
type StringOrArr = string | string[];
function flatten(val: StringOrArr): string[] {
  return Array.isArray(val) ? val : [val];
}

Diskriminierte Union-Typen im Vergleich zu Klassenhierarchien

Diskriminierte Union-Typen sind eine funktionale Alternative zur Klassenvererbung, um Varianten zu modellieren. Sie sind einfacher, serialisierbar und funktionieren gut mit Pattern Matching.

Praxisbeispiel: HTTP-Response-Union

Modellieren Sie verschiedene Zustände einer API-Antwort als diskriminierte Union.
type ApiState<T> =
  | { status: 'loading' }
  | { status: 'success'; data: T }
  | { status: 'error'; message: string };

Kurzer Test

Was muss jedes Mitglied einer diskriminierten Union enthalten, damit TypeScript korrekt eingrenzen kann?

Zusammenfassung

Diskriminierte Union-Typen verwenden eine gemeinsame Literal-Eigenschaft als Diskriminator. Grenzen Sie sie mit switch/case ein und fügen Sie eine never-Vollständigkeitsprüfung hinzu, um unbehandelte Fälle zu erkennen. Sie eignen sich ideal für Zustandsautomaten, Actions und API-Antworten.
Kostenlos starten

Lerne TypeScript mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
101
Lektionen
352

Häufig gestellte Fragen

Ist die Lektion „Diskriminierte Unions für sicheres Pattern Matching“ kostenlos?

Ja — der vollständige Text von „Diskriminierte Unions für sicheres Pattern Matching“ 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 „Diskriminierte Unions für sicheres Pattern Matching“?

Fügen Sie den Mitgliedern einer Union ein gemeinsames Literal-Feld hinzu, um Typsicherheit zu gewährleisten. 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 3 von 4.

Wie lange dauert die Lektion „Diskriminierte Unions für sicheres Pattern Matching“?

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

  1. Union-Typen: A oder B
  2. Intersection-Typen: A und B
  3. Diskriminierte Unions für sicheres Pattern Matching
  4. Praxisnahe Muster mit Union- und Intersection-Typen
← Zurück zu TypeScript Academy