- Published on
Effective TypeScript item7
✅ Item 7: 타입은 값들의 집합
🎯 핵심 메시지
타입은 해당 타입이 가질 수 있는 모든 값들의 집합 으로 이해하자.
타입 간의 관계, 유니언/인터섹션 타입, 서브타입을 더 명확하게 이해할 수 있다.
|
) = 합집합 (Union of Sets)
🔶 유니언 타입 (type Animal = 'cat' | 'dog';
type Pet = 'dog' | 'parrot';
type AnimalOrPet = Animal | Pet; // 'cat' | 'dog' | 'parrot'
👉 여러 타입의 가능한 값을 합쳐서 하나의 집합을 구성함.
&
) = 교집합 (Intersection of Sets)
🔷 인터섹션 타입 (type HasName = { name: string };
type HasAge = { age: number };
type Person = HasName & HasAge;
const p: Person = {
name: 'Boohi',
age: 30,
}; // ✅ name과 age 모두 필요
👉 두 타입을 모두 만족하는 구조만 포함.
✳️ type vs interface: 집합으로 해석하기
🔶 type: 값 집합을 직접 정의하거나 결합
type Fruit = 'apple' | 'banana';
type ExtendedFruit = Fruit | 'orange'; // 합집합
🔷 interface: 객체 구조를 정의하고 확장
interface User {
id: number;
name: string;
}
interface Admin extends User {
role: 'admin';
}
Admin
은 User
의 속성을 포함한 확장된 집합이다.
📚 extends와 집합 관계
type A = 'a' | 'b';
type B = 'a' | 'b' | 'c';
type Result = A extends B ? true : false; // ✅ true
type Result2 = B extends A ? true : false; // ❌ false
→ extends
는 부분집합 관계를 의미함.