
TypeScript에서 never 타입은 절대 발생하지 않는 값의 타입을 의미합니다.
즉, never 타입의 변수는 어떤 값(타입)도 가질 수 없으며, 함수는 어떤 값(타입)을 반환하지 않습니다.
never 타입을 사용하면 코드에서 강한 타입 안정성을 보장할 수 있습니다.
switch 문에서 모든 경우를 다루지 않았을 경우, TypeScript는 컴파일 시점에 오류를 발생시켜 실수를 방지하는 데 도움을 줍니다.
type Animal = "dog" | "cat";
const getSound = (animal: Animal): string => {
switch (animal) {
case "dog":
return "멍멍";
case "cat":
return "야옹";
default:
const neverValue: never = animal; // 오류 발생
return neverValue;
}
}
never 타입을 활용하면, 존재할 수 없는 값(타입)이 실수로 코드에 사용되는 것을 방지할 수 있습니다.
type Impossible = string & number; // never
예를 들어, 어떠한 값도 string과 number 타입을 동시에 가질 수 없기에 Impossible은 자동으로 never 타입이 됩니다.
함수의 반환 타입이 never 타입이라면, 해당 함수는 절대 값을 반환하지 않음을 명확하게 나타낼 수 있습니다. 예를 들어, 예외를 던지는 함수가 이에 해당합니다.
const throwError = (message: string): never => {
throw new Error(message);
}
위 함수는 무조건 예외를 발생시키기 때문에, 어떤 값도 반환하지 않으며, never 타입이 적절합니다.
never와 void는 비슷해 보이지만 의미와 사용 목적이 완전히 다릅니다.
Voidvoid 타입은 아무것도 반환하지 않는 함수의 반환 타입입니다.undefined입니다.undefined 반환하고 종료됩니다.function sayHello(): void {
console.log("Hello!");
}
const result = sayHello();
console.log(result); // undefined
Nevernever 타입의 의미는 절대 반환되지 않는 함수의 반환 타입입니다.function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
console.log("무한 루프 실행 중...");
}
}
never 타입은 절대 실행되지 않거나 존재할 수 없는 값을 의미하는 타입입니다. 이를 통해 타입 체킹을 강화하고, 무한 루프나 오류를 발생시키는 함수에 적절한 타입을 적용할 수 있습니다.
void 타입과는 다르게 never 타입은 반환값이 아예 없으며, 사용 목적 또한 다릅니다.