Branded Types
TypeScript 🔴 SeniorType : Pattern
Definition
Un branded type est un type nominal cree en ajoutant une propriete fantome (brand) a un type structurel. Deux branded types avec la meme structure de base sont incompatibles entre eux.
Analogie
Deux bouteilles d'eau identiques mais avec des etiquettes differentes : le contenu est le meme, mais on ne les confond pas.
Exemple de code
type USD = number & { readonly __brand: class="str">39;USD39; };
type EUR = number & { readonly __brand: class="str">39;EUR39; };
function toUSD(amount: number): USD { return amount as USD; }
function charge(amount: USD) { class="cmt">/* ... */ }
class="cmt">// charge(42); // Error!
class="cmt">// charge(toUSD(42)); // OKCas d'usage
Empecher de melanger des IDs, des devises ou des unites de mesure qui sont toutes des string/number.