Sobes.tech
Middle

Haben Sie schon einmal diskriminierende Vereinigungen und Type Guards verwendet? Welche eingebauten Type Guards kennen Sie?

sobes.tech KI

Antwort von AI

Diskriminierte Vereinigungen (discriminated unions) und Type Guards sind mächtige Werkzeuge von TypeScript, um mit Vereinigungstypen zu arbeiten, die es ermöglichen, sicher einen bestimmten Typ innerhalb der Vereinigung zu bestimmen.

Diskriminierte Vereinigungen sind Vereinigungstypen, bei denen jeder Typ einen gemeinsamen Literal-Schlüssel (z.B. das Feld type) hat, anhand dessen man den konkreten Typ eindeutig bestimmen kann.

Type Guards sind Funktionen oder Konstruktionen, die den Typ einer Variablen zur Laufzeit überprüfen und den Typ für den Compiler einschränken.

Integrierte Type Guards in TypeScript:

  • typeof — für Primitive (string, number, boolean)
  • instanceof — zur Überprüfung der Zugehörigkeit zu einer Klasse
  • in — um das Vorhandensein einer Eigenschaft im Objekt zu prüfen

Beispiel für eine diskriminierte Vereinigung und einen Type Guard:

interface Quadrat {
  kind: 'square';
  size: number;
}

interface Kreis {
  kind: 'circle';
  radius: number;
}

type Form = Quadrat | Kreis;

function fläche(forma: Form): number {
  switch (forma.kind) {
    case 'square':
      return forma.size * forma.size;
    case 'circle':
      return Math.PI * forma.radius ** 2;
  }
}

Hier ist kind der Diskriminator, und switch wirkt als Type Guard.

Verwendung der eingebauten Type Guards:

function istString(wert: unknown): wert ist string {
  return typeof wert === 'string';
}

if (istString(etwas)) {
  // hier ist `etwas` vom Typ string
}