Files
2nd/10_Wiki/Topics_Blog/Exhaustiveness-Checking.md
T

28 lines
1.7 KiB
Markdown

---
id: P-REINFORCE-AI-EXHAUSTIVENESS
category: "10_Wiki/💡 Topics/AI"
confidence_score: 0.99
tags: [TypeScript, Safety, ExhaustivenessCheck, NeverType]
last_reinforced: 2026-04-20
---
# [[Exhaustiveness-Checking|Exhaustiveness-Checking]] (망라성 검사)
## 📌 한 줄 통찰 (The Karpathy Summary)
> "빠진 케이스가 없는지 컴파일러가 대신 체크하는 완벽주의자의 도구." 모든 가능한 타입 시나리오를 처리했음을 논리적으로 보장하여, 나중에 새로운 타입이 추가되었을 때 발생할 수 있는 런타임 에러를 원천 봉쇄하는 기법이다.
## 📖 구조화된 지식 (Synthesized Content)
- **The Never Trick**:
- 타입스크립트의 `never` 타입을 활용한다. 모든 조건문(if/switch)이 끝난 뒤 `default` 케이스에 `const _check: never = remainValue;`를 할당한다.
- **How it works**:
- 만약 처리하지 않은 타입이 남아 있다면, 그 값은 `never` 타입에 할당될 수 없으므로 컴파일 에러가 발생한다.
- **Value**:
- 코드 유지보수 시 강력한 안전장치가 된다. 예를 들어 `UserRole`에 'Guest'가 새로 추가되면, 이를 처리하지 않은 모든 스위치 문에서 즉시 빨간 줄이 그어진다.
## ⚠️ 모순 및 업데이트 (RL Update)
- 망라성 검사는 '닫힌 시스템(Closed System)'에서는 완벽하지만, 외부 라이브러리에서 동적으로 확장되는 타입에 대해서는 무력할 수 있다. 이때는 `assertNever`와 같은 헬퍼 함수를 사용하여 런타임 에러를 명시적으로 던지도록 설계해야 한다.
## 🔗 지식 연결 (Graph)
- Related: [[Discriminated-Unions|Discriminated-Unions]] , Type-Soundness
- Tool: TypeScript Compiler (tsc)