Um union (A | B) significa "A ou B." Uma intersection (A & B) significa "A e B ao mesmo tempo."
ts
= | | ;
: = ;
() { }
Um union (A | B) significa "A ou B." Uma intersection (A & B) significa "A e B ao mesmo tempo."
= | | ;
: = ;
() { }
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
}
Até você estreitar um union, você só pode acessar membros presentes em todo membro do union — o compilador protege você.
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
Intersections são ótimas para compor/mixar tipos de objetos (p. ex. adicionar props a um tipo existente).
Unions modelam "uma dentre várias possibilidades" — a base da modelagem de estado segura (p. ex. discriminated unions para estado de reducer), sobrecargas de função e tipos nuláveis (T | null).
Intersections compõem tipos juntos.
Juntos, eles tornam o sistema de tipos do TypeScript expressivo o suficiente para espelhar dados reais com precisão.