<aside> 📄 Table Of Contents
</aside>
<aside>
💡 강의에 사용된 타입계층도.png 다운로드받기 (우클릭-다운로드)

</aside>
지난 시간에 배운 내용을 토대로 타입 계층도를 다시한번 살펴보며 여러가지 기본 타입들이 각각 왜 그런 특징을 갖는지 자세히 살펴보겠습니다.
unknown 타입은 타입 계층도의 최 상단에 위치합니다.

따라서 unknown 타입 변수에는 모든 타입의 값을 할당할 수 있습니다. 바꿔 말하면 모든 타입은 unknown 타입으로 업 캐스트 할 수 있습니다.
let a: unknown = 1; // number -> unknown
let b: unknown = "hello"; // string -> unknown
let c: unknown = true; // boolean -> unknown
let d: unknown = null; // null -> unknown
let e: unknown = undefined; // undefined -> unknown
let f: unknown = []; // Array -> unknown
let g: unknown = {}; // Object -> unknown
let h: unknown = () => {}; // Function -> unknown
unknown 타입이 타입 계층도에서 가장 위에 위치한다는 뜻은 unknown 타입은 모든 타입의 슈퍼타입이라는 뜻 입니다. 그러므로 모든 타입은 unknown 타입의 부분집합입니다.
결국 unknown 타입은 모든 타입을 부분집합으로 갖는 타입스크립트 전체 집합 입니다.

앞서 다운캐스트는 예외적인 경우가 아니면 허용되지 않는다고 배웠습니다. 따라서 unknown 타입의 값은 any를 제외한 어떤 타입의 변수에도 할당할 수 없습니다.
let unknownValue: unknown;
let a: number = unknownValue;
// 오류 : unknown 타입은 number 타입에 할당할 수 없습니다.
never 타입은 타입 계층도에서 가장 아래에 위치합니다.

앞서 never 타입은 불가능, 모순을 의미하는 타입이라고 설명한 적이 있습니다. 타입이 집합임을 이해한 지금 never 타입을 다시 표현하자면 never는 공집합을 뜻하는 타입입니다. 수학에서의 공집합은 아무것도 포함하지 않는 집합이라는 뜻 입니다.