Nominale Typisierung durch Branded Types
TypeScript verwendet strukturelle Typisierung, aber manchmal benötigen wir nominale Typisierung, um das versehentliche Mischen logisch unterschiedlicher Primitivtypen (wie Währungen oder IDs) zu verhindern. Branding 'markiert' einen Typ mit einer eindeutigen Eigenschaft, die zur Laufzeit nicht existiert, aber zur Kompilierzeit eine strikte Trennung erzwingt.
type Brand<K, T> = K & { __brand: T };type USD = Brand<number, "USD">;type EUR = Brand<number, "EUR">;const usd = 10 as USD;const eur = 10 as EUR;function addUSD(a: USD, b: USD): USD {return (a + b) as USD;}// Error: Argument of type 'EUR' is not assignable to 'USD'// addUSD(usd, eur);