Branded / Nominal Types
TypeScript 🔴 SeniorDéfinition
Technique pour simuler du typage nominal en ajoutant une propriété fantôme (brand) a un type. Empêche le mélange accidentel de types structurellement identiques.
Analogie
Comme des billets de différentes devises — même papier, même forme, mais on ne mélange 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 unités de mesure qui sont structurellement des strings/numbers.
Anti-pattern
Utiliser des types simples (string, number) pour des IDs de domaines différents — un userId passe en orderId compile sans erreur.