타입은 집합이다?
타입스크립트는 동일한 속성과 특징을 갖는 여러개의 값들을 모아둔 집합이다!
따라서 다음과 같이 다른 타입들과의 포함관계를 가진다.
타입 호환성
어떤 타입을 다른 타입으로 취급해도 괜찮은지 판단하는 것이다.
위의 코드와 같이 num2는 number 리터럴 타입이므로 number 타입인 num1에 대입(up cast)이 가능하다.
하지만 더 큰 타입의 변수를 더 작은 타입의 변수에 넣을 수 없으므로 num1을 num2에 대입(down cast)하는 것은 불가능하다.
타입 계층도
아래의 타입 계층도를 통해 타입의 포함관계를 파악할 수 있다.
단, 여기서 예외가 있는데, 바로 any 타입이다.
any 타입은 치트키 같은 타입으로 자신보다 윗 계층인 unkonwn이 any로 downcast가 가능하고, any가 아랫 계층들로 downcast도 가능하다.
하지만 모두 가능항 any도 never로의 downcast는 불가능하다. never는 공집합을 의미하기 때문이다.
객체타입의 호환성
어떤 객체타입을 다른 객체타입으로 취급해도 괜찮은가?
객체타입들은 프로퍼티를 기준으로 포함관계를 생성함
ts는 구조적 타입 시스템이기 때문에 프로퍼티를 기준으로 타입을 따른다.
위 코드를 보면 animal 타입은 name과 color를 무조건 가지고 있어야 한다. dog 타입은 name과 color를 가지고 있으므로 animal 타입이라고 할 수 있다.
하지만 반대로 dog 타입은 breed까지 가지고 있어야하는데, animal 타입은 그렇지 않으므로 반대로는 포함이 되지 않는다.
출처
한 입 크기로 잘라먹는 타입스크립트 대시보드 - 인프런 | 강의 (inflearn.com)
'typescript' 카테고리의 다른 글
[TypeScript] 대수 타입 - 합집합(union)타입, 교집합(intersection)타입 (0) | 2023.07.11 |
---|---|
[Typescript] 타입스크립트의 타입 (원시타입, 리터럴타입, 배열, 튜플, 객체, 타입별칭, 인덱스 시그니쳐, 열거형타입, any, unkown, void, never) (0) | 2023.07.02 |
[typescript] 타입스크립트 시작 및 옵션 설정 (0) | 2023.06.19 |