Conditional Types, Infer und Template Literal Types — drei Konstrukte, mit denen sich ganze API-Contracts zur Compile-Zeit prüfen lassen. Was in TypeScript 4.0 noch als Exotenwerkmzeug galt, ist heute unser stärkstes Werkzeug gegen Laufzeitfehler.
Das stärkste Pattern in unserem Codebase: Ein Typ, der aus einer Routen-Definition automatisch die Handler-Signatur ableitet. Route registriert, Handler geschrieben — der Compiler prüft, dass Request- und Response-Typen zusammenpassen, ohne dass ein Schema-Duplikat irgendwo schlummert. Ein fehlender Handler wird zum Compile-Fehler, nicht zum 404 in Produktion.
Die Kosten: Compile-Zeit und Verständlichkeit. Wer das Typsystem bis an die Grenzen treibt, erzeugt Code, den nur noch die Hälfte des Teams liest. Unsere Regel inzwischen: So viel Typ-Magie wie nötig, so wenig wie möglich. Jedes komplexe Generic braucht einen Kommentar, der in einem Satz erklärt, was es tut.