Initial Commit: Reinforced Knowledge Wiki v1.0 - Pure Origin
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-90D699
|
||||
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 네버 타입 (never type)"
|
||||
---
|
||||
|
||||
# [[네버 타입 (never type)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 정보 추출 중...
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **집합론적 특성 (Set Theory Perspective):**
|
||||
`never`는 집합론의 관점에서 '빈 집합(empty set, ∅)'으로 정의됩니다 [2]. 어떤 타입 `A`와 유니온(`|`) 연산을 해도 `never`는 영향을 주지 않으며(`A | never = A`), 교집합(`&`) 연산을 하면 항상 `never`가 됩니다(`A & never = never`) [2, 6]. 빈 집합은 모든 집합의 부분집합이므로 `never extends T`는 항상 참(true)이지만, `T extends never`는 `T`가 오직 `never` 타입일 때만 참이 됩니다 [3].
|
||||
|
||||
* **함수의 반환 타입 (Function Return Type):**
|
||||
무한 루프에 빠져 절대 완료되지 않거나, 항상 에러(Exception)를 던지기만 하는 함수의 반환 타입으로 사용해야 합니다 [1, 5]. 함수가 실행을 마치고 아무것도 반환하지 않는(실질적으로는 `undefined`를 반환하는) 경우에 쓰이는 `void` 타입과는 명확히 다릅니다 [5].
|
||||
|
||||
* **타입 좁히기와 완전성 검사 (Type Narrowing & Exhaustiveness Checking):**
|
||||
식별 가능한 유니온(Discriminated Unions)을 `switch` 문 등으로 분기 처리할 때 안전장치 역할을 합니다 [4, 7]. 개발자가 모든 가능한 케이스를 정상적으로 처리했다면, 분기문을 다 거치고 남은 변수의 타입은 `never`로 좁혀집니다(narrowed) [1, 7]. 만약 처리되지 않은 케이스가 하나라도 남아있다면 해당 변수는 실제 타입을 갖게 되며, 이를 `never` 타입으로 검사(예: `assertNever` 함수 사용)하려 할 때 타입 에러가 발생하여 런타임 버그를 사전에 방지할 수 있습니다 [7, 8].
|
||||
|
||||
* **타입 충돌 및 초과 속성 방어 (Type Conflicts & Excess Properties):**
|
||||
서로 호환되지 않는 속성을 가진 두 타입을 교집합(`&`)으로 묶을 때, TypeScript는 이를 계산하여 `never` 타입으로 만들 수 있습니다 [9]. 또한, 객체에서 예상치 못한 초과 속성을 감지하기 위한 고급 타입 기법에서도 활용됩니다. 입력된 객체에 허용되지 않은 초과 속성이 있을 경우 그 속성을 `never` 타입으로 매핑하면, (예를 들어 `string`은 `never`에 할당할 수 없으므로) 컴파일러가 강력한 할당 에러를 뱉게 하여 초과 속성 검사(Excess Property Checking)를 우회하는 것을 막을 수 있습니다 [10, 11].
|
||||
|
||||
* **상호 배타적 속성 구현 (Exclusive Props):**
|
||||
특정 조건이나 속성이 활성화되었을 때, 다른 속성들이 함께 사용되는 것을 막기 위해 상호 배타적인 속성들을 `never`로 처리하는 패턴에 사용됩니다. 이 방식을 통해 식별자(discriminant) 없이도 "이것 아니면 저것"의 구조를 안전하게 강제할 수 있습니다 [12].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[식별 가능한 유니온 (Discriminated Unions)]], [[집합론 (Set Theory)]], [[초과 속성 검사 (Excess Property Checking)]], [[구조적 타이핑 (Structural Typing)]]
|
||||
- **Projects/Contexts:** [[Type-safe Error Handling & Exhaustiveness Checking]], [[TypeScript Advanced Type System]]
|
||||
- **Contradictions/Notes:** 소스에서는 `never`와 `void`, `any`, `unknown`을 엄격하게 구분합니다. `void`는 정상적으로 완료되나 반환값이 없는 경우인 반면, `never`는 결코 도달할 수 없거나 완료되지 않는 값이라는 차이를 지적합니다 [5]. 또한 `any`는 타입 시스템을 우회하지만, `never`는 빈 집합으로서 타입 시스템 내에서 엄격한 논리적 제어를 돕는다는 상반된 특성을 지닙니다 [13, 14].
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/네버 타입 (never type).md]]
|
||||
---
|
||||
Reference in New Issue
Block a user