Une union (A | B) signifie "soit A soit B." Une intersection (A & B) signifie "à la fois A et B en même temps."
= | | ;
: = ;
() { }
Une union (A | B) signifie "soit A soit B." Une intersection (A & B) signifie "à la fois A et B en même temps."
= | | ;
: = ;
() { }
function format(x: string | number) {
// x.toFixed(2); // ❌ toFixed doesn't exist on string
if (typeof x === "number") return x.toFixed(2); // ✅ narrowed to number
return x.toUpperCase(); // ✅ here it's a string
}
Jusqu'à ce que vous réduisiez une union, vous ne pouvez accéder qu'aux membres présents sur chaque membre de l'union — le compilateur vous protège.
type Name = { name: string };
type Age = { age: number };
type Person = Name & Age; // must have BOTH name and age
const p: Person = { name: "Ann", age: 30 }; // both required
Les intersections sont excellentes pour composer/mélanger des types d'objets (par exemple, ajouter des props à un type existant).
Les unions modélisent "l'une de plusieurs possibilités" — la base d'une modélisation d'état sûre (par exemple, les unions discriminées pour l'état du réducteur), les surcharges de fonction et les types nullable (T | null).
Les intersections composent les types ensemble.
Ensemble, elles rendent le système de types de TypeScript assez expressif pour refléter précisément les données réelles.