Warum Advanced TypeScript wichtig ist
Das Typsystem von TypeScript ist Turing-vollständig. Mit fortschrittlichen Mustern können Sie ganze Kategorien von Fehlern bereits bei der Kompilierung erfassen, was für gut typisierten Code nahezu unmögliche Laufzeitfehler bedeutet.
Markierte Typen
Markierte Typen verhindern das Mischen von Werten, die denselben zugrunde liegenden Typ haben, aber unterschiedliche Bedeutungen haben.
type BenutzerId = string & { readonly __brand: "BenutzerId" };
type BestellId = string & { readonly __brand: "BestellId" };
function getBenutzer(id: BenutzerId) { /* ... */ }
function getBestellung(id: BestellId) { /* ... */ }
const benutzerId = "benutzer-123" as BenutzerId;
const bestellId = "bestell-456" as BestellId;
getBenutzer(bestellId); // Fehler! Typ 'BestellId' ist nicht für 'BenutzerId' abrufbar
Templatisierte Literal-Typen
Erstellen Sie automatisch sicherheitsrelevante Zeichenmuster.
type EreignisName = "klicken" | "hovern" | "fokussieren";
type HandlerName = `on${Großbuchstabe<EreignisName>}`;
// Ergebnis: "onClick" | "onHover" | "onFocus"
Diskriminierte Vereinigungen
Modellieren Sie Zustandsmaschinen direkt im Typsystem.
type AsyncState<T> =
| { status: "ruhig" }
| { status: "lädt" }
| { status: "erfolgreich"; data: T }
| { status: "fehlerhaft"; fehler: Fehler };
Bedingte Typen
Erstellen Sie Typen, die von anderen Typen abhängen.
type ApiResponse<Endpoint> =
Endpoint extends "/benutzer" ? Benutzer[] :
Endpoint extends `/benutzer/${string}` ? Benutzer : nie;
Zusammenfassung
Fortgeschrittene TypeScript-Muster verhindern Fehlern bei der Kompilierung. Beginnen Sie mit markierten Typen und diskriminierten Vereinigungen – sie bieten den größten Wert mit der geringsten Komplexität.