Files
2nd/10_Wiki/Topics/never 타입.md
T
2026-05-02 23:33:34 +09:00

3.8 KiB


id: P-Reinforce-AUTO-5297D4 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - never 타입"

never 타입

📌 한 줄 통찰 (The Karpathy Summary)

never 타입은 TypeScript에서 결코 발생할 수 없는 값이나 완료되지 않는 상태를 의미하는 타입이다 [1, 2]. 주로 무한 루프나 예외를 던지는 함수의 반환 타입으로 쓰이며, 집합론적으로 '빈 집합'을 나타내어 컴파일러의 완전성 검사(Exhaustiveness checking) 및 엄격한 타입 통제를 구현하는 데 핵심적으로 사용된다 [3, 4].

📖 구조화된 지식 (Synthesized Content)

  • 집합론적 의미와 동작 원리: TypeScript 타입 시스템을 집합으로 접근할 때, never는 어떠한 요소도 가지지 않는 '빈 집합(∅)'을 의미한다 [3, 5]. 빈 집합은 모든 집합의 부분집합이므로 never 타입은 모든 타입에 할당될 수 있다(즉, never extends T는 항상 참이다) [6]. 하지만 반대로 never 자신을 제외한 어떤 타입도 never에 할당될 수 없다 [6]. 유니온 타입 및 교집합 연산에서는 A & never = never, A | never = A의 결과를 산출한다 [3, 7].
  • 완전성 검사 (Exhaustiveness Checking): 식별 가능한 유니온(Discriminated Unions)을 활용할 때, switch문 등에서 모든 분기를 처리했는지 컴파일 타임에 강제하기 위해 사용된다 [4, 8]. 모든 유효한 케이스를 걸러내고 남은 기본(default) 상태를 never 타입 변수에 할당하도록 구성하면, 추후 유니온에 새로운 타입이 추가되었을 때 처리하지 않은 케이스가 있다면 컴파일 에러를 발생시켜 안전성을 보장한다 [4, 9].
  • 초과 속성 차단 및 배타적 속성 관리: 객체 할당 시 예기치 않은 잉여 속성을 잡아내기 위해 특정 속성을 never로 선언하는 기법이 쓰인다 [10, 11]. never는 어떠한 값과도 호환되지 않으므로, 들어오면 안 되는 속성을 never로 매핑하면 값이 전달될 때 타입 에러를 유발하여 잘못된 사용을 막는다 [10, 12]. 이와 유사하게 판별자(discriminant) 없이 상호 배타적인 속성을 설계할 때, 한쪽이 활성화되면 다른 쪽의 속성을 never 타입으로 처리하여 섞임 현상을 방지할 수 있다 [13].
  • 함수 반환 타입에서의 활용: 예외(Error)를 던져 프로그램의 정상 흐름을 중단하거나 무한 루프를 도는 등, 결코 정상적으로 완료되지 않는 함수의 반환 타입으로 명시한다 [2, 14].

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)

  • Related Topics: 유니온 타입 (Union Types), 식별 가능한 유니온 (Discriminated Unions), 집합론 (Set Theory), 초과 속성 검사 (Excess Property Checking
  • Projects/Contexts: TypeScript 상태 관리 및 에러 처리 방어 (State Management and Defensive Error Handling)
  • Contradictions/Notes: nevervoid는 기능적으로 다르다. 함수가 정상적으로 실행을 마치고 아무 값도 반환하지 않는 경우(실제로는 undefined를 반환)에는 void를 써야 하며, 예외를 던지거나 영원히 종료되지 않아 실행 흐름이 끝에 도달하지 못하는 경우에만 never를 사용해야 한다 [2, 14].

Last updated: 2026-04-18