Branded / Nominal Types

TypeScript 🔴 Senior

Definition

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