Un union (A | B) significa "A o B". Una intersection (A & B) significa "A y B a la vez".
ts
= | | ;
: = ;
() { }
Un union (A | B) significa "A o B". Una intersection (A & B) significa "A y B a la vez".
= | | ;
: = ;
() { }
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
}
Hasta que hagas narrowing de un union, solo puedes acceder a miembros presentes en cada miembro del union: el compilador te protege.
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
Las intersections son ideales para componer o mezclar tipos de objeto (por ejemplo, añadir props a un tipo existente).
Los unions modelan "una de varias posibilidades": la base del modelado seguro de estado (por ejemplo, discriminated unions para el estado de un reducer), las sobrecargas de funciones y los tipos nullable (T | null).
Las intersections componen tipos entre sí.
Juntos hacen que el sistema de tipos de TypeScript sea lo bastante expresivo como para reflejar datos reales con precisión.