
타입 계층도의 최상단
-> 모든 타입들을 받아줄 수 있음
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
타입 계층도의 최하단에 위치
-> 불가능, 모순을 의미
function errorFunc(): never {
throw new Error();
}
에러 반환과 같이 불가능, 모순적인 상황에 부여
=> 모든 타입으로 업캐스팅 가능 (모든 타입에 대입 가능)
let neverVar: never;
let a: number = neverVar; // never -> number
let b: string = neverVar; // never -> string
let c: boolean = neverVar; // never -> boolean
let d: null = neverVar; // never -> null
let e: undefined = neverVar; // never -> undefined
let f: [] = neverVar; // never -> Array
let g: {} = neverVar; // never -> Object

-> 아무것도 반환하지 않는 함수의 반환값 타입으로 주로 사용
function noReturnFunc(): void {
console.log("hi");
}
=>void 타입의 서브타입은 undefined 타입과 never 타입 밖에 없음
let voidVar: void;
voidVar = undefined; // undefined -> void (ok)
let neverVar: never;
voidVar = neverVar; // never -> void (ok)
