TypeScript Branded Types: Domänenmodellierung zur Compile-Zeit

Die meisten TypeScript-Codebasen behandeln Domänen-Identifikatoren als rohe Primitives. Eine userId ist ein string. Eine orderId ist ein string. Der amount einer Transaktion ist eine number. TypeScripts strukturelles Typsystem sieht sie als identische Formen, sodass die Übergabe einer orderId an eine Stelle, die eine userId erwartet, klaglos kompiliert — bis die Datenbank um 2 Uhr nachts "user not found" zurückgibt und man eine Stunde damit verbringt, ein vertauschtes Argument aufzuspüren.

Das ist Primitive Obsession, und Branded Types eliminieren diese gesamte Problemklasse zur Compile-Zeit, ganz ohne Laufzeitkosten.