Un union (A | B) significa "A oppure B." Un intersection (A & B) significa "A e B contemporaneamente."
ts
= | | ;
: = ;
() { }
Un union (A | B) significa "A oppure B." Un intersection (A & B) significa "A e B contemporaneamente."
= | | ;
: = ;
() { }
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
}
Finché non restringi un union, puoi accedere solo ai membri presenti in ogni membro dell'union — il compilatore ti protegge.
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
Gli intersection sono ottimi per comporre/mescolare tipi di oggetti (ad es. aggiungere props a un tipo esistente).
Gli union modellano "una di più possibilità" — il fondamento della modellazione dello stato sicura (ad es. union discriminati per lo stato del reducer), overload di funzioni e tipi nullable (T | null).
Gli intersection combinano insieme i tipi.
Insieme, rendono il sistema di tipi di TypeScript abbastanza espressivo da rispecchiare con precisione i dati reali.