1. 개요
절대로 발생하지 않는 값의 타입을 의미한다.
즉 논리적으로 불가능한 값의 타입을 의미하며, 함수의 반환 타입으로 쓰였을 경우 그 함수는 절대로 값을 반환하지 않는 것을 의미한다. (undefined
및 null
도 반환하지 않음)
집합의 개념으로 생각해보면, 공집합에 해당한다.
2. 예시
number
이면서 string
인 타입은 JavaScript에서 존재하지 않는다.
따라서 타입을 정의할 때 위의 조건을 사용하면, 추론된 타입은 never
가 된다.
아래는 그 예시이다.
let a: number & string; // let a: never
함수는 return
을 통해 명시적으로 무언가를 반환하지 않을 경우, 자동으로 반환 타입이 void로 추론되며, 기본적으로 undefined
가 반환된다.
하지만 never
를 반환 타입으로 쓸 경우, 어떠한 경우에도 무언가를 반환하지 않음을 의미하는데, 함수가 항상 예외(에러)를 던지거나, 무한 루프에 빠지는 경우에 해당한다.
const foo: () => never = () => {
throw Error();
}
const bar: () => never = () => {
while (true) {}
};