3-1. 타입스크립트 이해하기
- 문법만 외워서는 TS를 제대로 활용하기 어렵다. TS를 제대로 활용하기 위해서는 다음과 같은 부분에 대한 이해가 필요하다.
- 어떤 기준으로 타입을 정의하는지
- 어떤 기준으로 타입간의 관계를 정의하는지
- 어떤 기준으로 타입의 오류를 검사하는지
3-2. 타입은 집합이다

- 타입은 집합이다. 집합은 동일한 속성을 가진 원소들의 모임을 뜻한다. 예를들어 TS의 number type의 경우, 위와 같은 집합으로 나타낼 수 있다.

- 집합은 포함 관계를 가질 수 있는데, 예를들어 위의 number Literal type은 number type에 속하는 집합이다.

- 이 관계를 우리는 super-sub 또는 parent-child 라고 부른다.
- 타입스크립트에서 타입은 이처럼 집합으로 표현할 수 있고, 각 타입들은 모두 서로 다른 타입을 포함하거나 속하는, 계층 관계를 가지고 있다.

- 타입을 집합 관계로 나타낼 수 있다는 것을 이해하고 나면, 자연스럽게 타입 호환성(compatibility / assignability) 개념도 이해할 수 있다.
- 정사각형과 직사각형의 관계처럼, 넘버 타입을 넘버 리터럴 타입으로 취급하는 것을 불가능하지만, 모든 넘버 리터럴 타입은 넘버 타입으로 취급할 수 있다.


- 이를 코드로 확인해보면 위와 같다.
- number type으로 정의된 num1에 num2값을 할당하는 것은 가능하지만, number literal type으로 정의된 num2에 supertype인 number type으로 정의된 num1의 값을 할당하는 것은 불가능한 것이다. (에러 발생)
- 그리고 TS가 이것을 금지하는 이유는 num1의 값이 number literal type이 아닌 다른 number type의 값일 가능성이 있기 때문일 것이다.

- 이처럼 서브타입을 슈퍼타입으로 취급하는 것을 업캐스팅, 반대를 다운캐스팅이라고 부른다.
- 업캐스팅은 모든 상황에 가능한 반면, 다운캐스팅은 대부분의 상황에 불가능하다. (가능한 경우가 있다는건가?)
3-3. 타입 계층도와 함께 특수 기본타입 (다시한번) 살펴보기
