TypeScript 'Never'

Sangkun·2025년 2월 9일
1

typescript

목록 보기
2/3
post-thumbnail

Never 타입이란?

TypeScript에서 never 타입은 절대 발생하지 않는 값의 타입을 의미합니다.
즉, never 타입의 변수는 어떤 값(타입)도 가질 수 없으며, 함수는 어떤 값(타입)을 반환하지 않습니다.

Never 은 왜 필요할까? 🤔

1. 타입 안전성 🛡️

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

2. 불가능한 코드 검출 🚫

never 타입을 활용하면, 존재할 수 없는 값(타입)이 실수로 코드에 사용되는 것을 방지할 수 있습니다.

type Impossible = string & number; // never

예를 들어, 어떠한 값도 string과 number 타입을 동시에 가질 수 없기에 Impossible은 자동으로 never 타입이 됩니다.

3. 타입 체킹 강화 🔍

함수의 반환 타입이 never 타입이라면, 해당 함수는 절대 값을 반환하지 않음을 명확하게 나타낼 수 있습니다. 예를 들어, 예외를 던지는 함수가 이에 해당합니다.

const throwError = (message: string): never => {
  throw new Error(message);
}

위 함수는 무조건 예외를 발생시키기 때문에, 어떤 값도 반환하지 않으며, never 타입이 적절합니다.

Void와 Never의 차이 ⚖️

nevervoid는 비슷해 보이지만 의미와 사용 목적이 완전히 다릅니다.

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 타입은 반환값이 아예 없으며, 사용 목적 또한 다릅니다.

profile
지식에 대한 두려움을 기록으로 극복하는 개발자

0개의 댓글

관련 채용 정보