ProgrammierungBackend TypeScript Entwickler

Erzählen Sie von dem Mechanismus der 'Schnittmengen-Typen' (intersection types) in TypeScript. Wie verwendet man sie richtig und welche Fallstricke gibt es?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

Schnittmengen-Typen (&, intersection types) ermöglichen es, mehrere Typen zu einem zu kombinieren, der alle Eigenschaften der kombinierten Typen besitzt.

Beispiel:

type Person = { name: string }; type Worker = { job: string }; type WorkingPerson = Person & Worker; // { name: string; job: string } const wp: WorkingPerson = { name: "Leo", job: "Dev" };

Das ist nützlich bei der Komposition erweiterbarer Verträge und beim Aufbau komplexer Typen aus Primitiven.

Wenn jedoch inkompatible Typen (z. B. type A = { foo: string } und type B = { foo: number }) überschneidet werden, entsteht ein Typ, den man nicht initialisieren kann.

Beispiel für inkorrekte Schnittmenge:

type A = { foo: string }; type B = { foo: number }; type C = A & B; // C = { foo: never }

Fangfrage

Was passiert, wenn man zwei Typen überschneidet, die dasselbe Feld mit inkompatiblen Datentypen haben?

Antwort: Es entsteht ein Feld mit dem Typ never, da der Wert gleichzeitig nicht sowohl eine Zeichenkette als auch eine Zahl sein kann. Solch einen Typ kann man nicht gültig implementieren.

type T1 = { id: string }; type T2 = { id: number }; type T3 = T1 & T2; // { id: never }

Beispiele für reale Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas


Geschichte

Im Projekt wurden Typen aus verschiedenen Bibliotheken überschneidet, ohne zu bemerken, dass es identische Felder mit unterschiedlichen Typen gab. Infolgedessen entstand ein unerwarteter "unmöglicher" (never) Typ, der zur Unmöglichkeit führte, ein gültiges Objekt zur Übergabe an die API zu erstellen.


Geschichte

Der Entwickler musste die Typen von DTO und Domänenentitäten "verkleben". In der Schnittmenge waren zwei inkompatible Eigenschaften, und der Versuch, den resultierenden Typ zu verwenden, führte zu mehrdeutigen Kompilierungsfehlern. Der Entwickler verbrachte Zeit mit dem Debuggen, bevor er die Ursache verstand.


Geschichte

In einem der Mikrodienste wurde ein überschneideter Typ für die Beschreibung des Anfragekörpers deklariert. Aufgrund einer API-Änderung erhielt eine der Eigenschaften einen anderen Typ, und die neuen Änderungen führten nicht sofort zu einem Kompilierungsfehler - die Probleme traten erst zur Laufzeit nach dem Deployment auf.