타입스크립트 unknown, any, never의 차이

헷갈리는 세 종류의 타입에 대해 차이점을 정리했다.

unknown 과 any

unkown 타입과 any 타입의 차이는 재선언 가능 여부이다.
unkown 타입은 한번 타입이 선언되면 재차 할당시 동일한 타입이여야 한다. 예를 들어, number 타입의 값을 할당시 다음 번 할당의 경우 number 타입이 와야 한다.

let a: unknown
let b: string
// number 타입으로 선언
a = 5
b = 'b'
// 에러 발생! unkown 타입은 number 타입이 할당되었으므로 다른 타입이 와서는 안된다.
a = b

그러나, any 타입은 다르다. 어떤 타입이 와도 재선언이 가능하다.

let a: any
let b: string
// number 타입으로 선언
a = 5
b = 'b'
// ok
a = b

never

never 타입은 함수 반환 값이 없는 경우 사용한다. 여기서 값이 없는 경우가 참 애매한데 자바스크립트 함수의 경우 리턴 값이 없는 경우 콘솔로 찍어보면 보통 undefined 가 찍힌다.
그러나, never 타입은 voidundefined 도 아닌 예외가 발생시 선언한다.

const neverFunc = (flag: boolean = false): string | never => {
    if (flag) {
        throw new Error('never')
    }
    return 's'
}

tsc

타입스크립트 컴파일러

# tsconfig.json 파일 생성
tsc --init
{
    "compoilerOptions": {
        // 어떤 자바스크립트 코드를 컴파일 할건지 설정.
        "target": "es5",
        // 특정 라이브러리를 추가
        "lib": ["dom"]
    },
    // 파일을 포함. 패턴이 적용되지 않으며 exclude 을 덮어쓴다.
    "files": [],
    // 파일이나 폴더를 제외. include 을 재정의한다.
    "exclude": ["build/*"],
    // 파일이나 폴더만 포함
    "include": ["main.ts"]
}