아이템 7. 타입이 갑들의 집합이라고 생각하기 #
7장은 다시 확인/이해가 필요하다.
‘할당 가능한 값들의 집합(범위)’ = ‘타입’ 이라고 생각하면 된다.
- 예를 들어, 모든 숫자값의 집합(범위)는
number
타입이다.
1. 가장 작은 집합 = 아무 값도 포함하지 않는 공집합 = never
const x: neber = 12;
// ~ '12' 형식은 'never' 형식에 할당할 수 없습니다.
2. 그 다음으로 작은 집합 = 한 가지 값만 포함하는 타입 = unit
(literal
)
type A = 'A';
type B = 'B';
type Twelve = '12';
3. 두 개 이상으로 묶은 집합 = 값 집합들의 합집합 = union
타입
type AB = 'A' | 'B';
type AB12 = 'A' | 'B' | 12;
& 연산자는 두 타입의 인터섹션(교집합)이다. #
interface Person {
name: string;
}
interface Lifespan {
birth: Date;
death?: Date;
}
type PersonSpan = Person & Lifespan
은 공집합(never
) 라고 생각하기 쉬우나,
아래와 같이 Person, Lifespan 타입을 모두 갖는 것이 교집합에 속한다.
const ps: PersonSpan = {
name: 'Alan Turing',
birth: ne Date('2000/01/01'),
death: ne Date('2100/01/01'),
}; // 정상
name, birth, death 세 가지 속성보다 더 많은 값을 가지는 것도 PersonSpan 타입에 속한다. (by 구조적타이핑)
| 연산자는 두 타입의 합집합이다. #
type K = keyof (Person | Lifespan); // 타입: never
Person, Lifespan 의 유니온 타입에 속하는 값은 없다. (?)
Person, Lifespan 혹은 둘 다 갖는 타입이 없다는 것으로 이해했다.
이 부분이 헷갈린다. 다시 확인해볼 것
그 외 내용 #
keyof (A&B) = (keyof A) | (keyof B)
keyof (A|B) = (keyof A) & (keyof B)
요약 #
- ‘타입 = 값의 집합(범위)’
- 타입 연산은 집합의 범위에 적용
- A | B
→ (객체 타입에서는)A 와 B의 속성을 모두 갖는 것 포함