

unknown은 모든 타입을 업캐스팅할 수 있어 모든 값들을 집어 넣을 수 있다.
function unknownExam() {
let a: unknown = 1;
let b: unknown = "hello";
let c: unknown = true;
let d: unknown = null;
let e: unknown = undefined;
}
하지만 반대로는 불가능

Never 타입 = 공집합
function neverExam() {
function neverFunc(): never {
while (true) {}
}
let num: number = neverFunc();
let str: string = neverFunc();
let bool: boolean = neverFunc();
}
위 unknown 타입과 같이 never 타입에서 업캐스팅으로 num, str, bool을 가리키고 있기 때문에 가능

하지만 반대로는 다운캐스팅이기 때문에 안됨
반환 값이 없는 함수에 사용
function voidExam() {
function voidFuc() {
console.log("hi");
}
let voidVar: void = undefined;
}
undefined는 void에 업캐스팅을 하기 때문에 사용 가능
- any 타입은 모든 타입에 대해 슈퍼 위치를 하고 있음
- 그리고 모든 위치의 서브타입이기도 한다.(never타입 제외)
function anyExam() {
let unknownVar: unknown;
let anyVar: any;
let undefinedVar: undefined;
anyVar = unknownVar;
undefinedVar = anyVar;
}
unknown타입이 any타입으로 다운캐스팅이 되고 있는데도 오류가 안생김undefined타입에 any타입의 값을 넣고 있는데도 오류가 안생김이처럼
any타입은
자신에게 오는 다운캐스팅도 가능하며,
자신이 다운캐스팅하는 것도 가능
하지만never타입이랑은 안된다.
그리하여any타입은 타입계층도를 완전히 무시
사용을 권하진 않음
위 설명을 아래 호환표 참고

한 입 크기로 잘라먹는 타입스크립트
https://www.inflearn.com/course/한입-크기-타입스크립트/dashboard