Branded / Nominal Types
TypeScript 🔴 SeniorDefinition
Technique pour simuler du typage nominal en ajoutant une propriete fantome (brand) a un type. Empeche le melange accidentel de types structurellement identiques.
Analogie
Comme des billets de differentes devises — meme papier, meme forme, mais on ne melange pas des euros et des dollars.
Exemple de code
type USD = number & { __brand: "USD" };
type EUR = number & { __brand: "EUR" };
const usd = (n: number) => n as USD;
const eur = (n: number) => n as EUR;
function pay(amount: USD) {}
pay(usd(100)); // OK
// pay(eur(100)); // Erreur
Cas d'usage
Distinguer des IDs, devises ou unites de mesure qui sont structurellement des strings/numbers.
Anti-pattern
Utiliser des types simples (string, number) pour des IDs de domaines differents — un userId passe en orderId compile sans erreur.