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
는 비슷해 보이지만 의미와 사용 목적이 완전히 다릅니다.
Void
void
타입은 아무것도 반환하지 않는 함수의 반환 타입입니다.undefined
입니다.undefined
반환하고 종료됩니다.function sayHello(): void {
console.log("Hello!");
}
const result = sayHello();
console.log(result); // undefined
Never
never
타입의 의미는 절대 반환되지 않는 함수의 반환 타입입니다.function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
console.log("무한 루프 실행 중...");
}
}
never
타입은 절대 실행되지 않거나 존재할 수 없는 값을 의미하는 타입입니다. 이를 통해 타입 체킹을 강화하고, 무한 루프나 오류를 발생시키는 함수에 적절한 타입을 적용할 수 있습니다.
void
타입과는 다르게 never
타입은 반환값이 아예 없으며, 사용 목적 또한 다릅니다.