[TypeScript] never 타입

never 타입이란

never는 값이 존재할 수 없는 상태를 의미합니다. 이는 주로 두 가지 경우에 나타납니다.

  • 함수가 끝없이 실행되어 반환되지 않을 때(무한 루프)
  • 함수가 항상 예외를 던져 정상 종료되지 않을 때

never의 기본 특성

never 타입의 변수에는 어떤 값도 할당할 수 없습니다. 예를 들어, 아래와 같이 never 타입 변수에 문자열, 숫자, 불린 등의 값을 할당하면 모두 컴파일 에러가 발생합니다.

let impossible: never;

// 아래 할당들은 모두 오류 발생 (타입 'string', 'number', 'boolean'은 never에 할당할 수 없음)
// impossible = "hello";
// impossible = 100;
// impossible = false;

이처럼 never 타입은 실제로 어떤 값도 담을 수 없음을 명시적으로 표현합니다.

무한 루프를 통한 never 반환

무한 루프에 빠진 함수는 정상적으로 종료되지 않으므로, 반환값이 존재할 수 없습니다. 이러한 경우, 함수의 반환 타입을 never로 지정합니다.

function monitorSystem(): never {
  while (true) {
    console.log("시스템 감시 중...");
  }
}

// monitorSystem(); // 호출 시 무한 실행

이 함수는 종료되지 않음을 타입으로 명확히 드러내며, 호출자가 반환값을 기대하지 않도록 합니다.

항상 예외를 던지는 함수

특정 조건에서 반드시 예외를 던지는 함수도 never 타입을 반환합니다. 이런 함수는 정상적인 반환값을 가질 수 없기 때문에, 반환 타입을 never로 선언합니다.

function panic(message: string): never {
  throw new Error(`치명적 오류: ${message}`);
}

function validateNumber(input: unknown): number {
  if (typeof input !== "number") {
    panic("숫자만 허용됩니다!");
  }
  return input;
}

console.log(validateNumber(10)); // 출력: 10
// validateNumber("문자"); // 오류 발생: 치명적 오류: 숫자만 허용됩니다!

'TypeScript' 카테고리의 다른 글

[TypeScript] 타입 별칭(Type Aliases) 이해하기  (0) 2025.02.24
[TypeScript] Union 타입  (0) 2025.02.24
[TypeScript] unknown 타입  (0) 2025.02.24
[TypeScript] 객체를 생성하는 5가지 방법  (0) 2025.02.24
[TypeScript] any 타입  (1) 2025.02.24