아이템 07. 타입이 값들의 집합이라고 생각하기 (Todo)

아이템 07. 타입이 값들의 집합이라고 생각하기 (Todo)

아이템 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의 속성을 모두 갖는 것 포함