Branded / Nominal Types

TypeScript 🔴 Senior

Dé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.
#advanced#pattern#safety

← → au clavier pour passer d'une fiche à l'autre