1. 개요

절대로 발생하지 않는 값의 타입을 의미한다.
즉 논리적으로 불가능한 값의 타입을 의미하며, 함수의 반환 타입으로 쓰였을 경우 그 함수는 절대로 값을 반환하지 않는 것을 의미한다. (undefinednull도 반환하지 않음)
집합의 개념으로 생각해보면, 공집합에 해당한다.

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) {}
};