Union(A | B)은 "A 또는 B 중 하나"를 의미합니다. Intersection(A & B)은 "A 와 B를 동시에 둘 다"를 의미합니다.
ts
= | | ;
: = ;
() { }
Union(A | B)은 "A 또는 B 중 하나"를 의미합니다. Intersection(A & B)은 "A 와 B를 동시에 둘 다"를 의미합니다.
= | | ;
: = ;
() { }
function format(x: string | number) {
// x.toFixed(2); // ❌ toFixed는 string에 존재하지 않음
if (typeof x === "number") return x.toFixed(2); // ✅ number로 narrowing
return x.toUpperCase(); // ✅ 여기서는 string
}
Union을 narrowing하기 전까지는 union의 모든 멤버에 존재하는 멤버에만 접근할 수 있습니다. 컴파일러가 당신을 보호합니다.
type Name = { name: string };
type Age = { age: number };
type Person = Name & Age; // name과 age를 모두 가져야 함
const p: Person = { name: "Ann", age: 30 }; // 둘 다 필수
Intersection은 객체 타입을 합성/혼합하는 데 유용합니다(예: 기존 타입에 프로퍼티 추가).
Union은 "여러 가능성 중 하나"를 모델링합니다 — 안전한 상태 모델링(예: reducer 상태를 위한 discriminated union), 함수 오버로드, nullable 타입(T | null)의 기반입니다.
Intersection은 타입들을 합성합니다.
이 둘을 함께 쓰면 TypeScript 타입 시스템이 실제 데이터를 정확히 반영할 만큼 표현력을 갖추게 됩니다.