Initial Commit: Reinforced Knowledge Wiki v1.0 - Pure Origin
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-B0B7AB
|
||||
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 리터럴 타입 (Literal Types)"
|
||||
---
|
||||
|
||||
# [[리터럴 타입 (Literal Types)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 리터럴 타입(Literal Types)은 `string`이나 `number`와 같은 범용적인 원시 타입 대신, 개발자가 미리 정의한 정확하고 구체적인 값(예: 특정 문자열, 특정 숫자 등)만을 허용하는 타입입니다. 단일 값으로 구성되는 이 타입은 주로 유니온 타입(Union Types)과 결합되어 허용되는 값의 범위를 엄격하게 제한하는 데 사용됩니다. 특히 식별 가능한 유니온(Discriminated Unions) 패턴의 핵심 요소로 작용하여, 컴파일러가 타입의 범위를 안전하게 좁히고(Narrowing) 예측 가능한 코드를 작성할 수 있도록 돕습니다.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **정의와 기본 특징:** 리터럴 타입은 변수나 매개변수가 가질 수 있는 값을 사전에 정의된 정확한 상수로 제한합니다. 예를 들어, 불리언 값 `true`와 `false`는 각각 단일 값으로 이루어진 리터럴 타입이며, `const str: 'hi' = 'hi';`와 같이 특정 문자열 역시 고유한 리터럴 타입으로 취급됩니다 [1-3].
|
||||
|
||||
* **유니온 타입(Union Types)과의 결합:** 리터럴 타입은 단독으로 쓰일 때는 단일 값만을 허용하지만, 유니온 타입과 결합할 때 그 강력함이 드러납니다. 예를 들어 `"loading" | "failed" | "success"`처럼 여러 리터럴 타입을 파이프(`|`)로 연결하여, 오직 정의된 목록에 속하는 값만을 안전하게 허용하도록 설계할 수 있습니다 [3-5].
|
||||
|
||||
* **식별 가능한 유니온(Discriminated Unions)의 핵심 역할:** 리터럴 타입은 서로 다른 구조를 가진 여러 타입들을 안전하게 구분하는 데 필수적으로 사용됩니다. 여러 타입이 공유하는 공통 속성(예: `kind: "circle" | "square"`)을 리터럴 타입으로 정의하면, 이 속성이 '식별자(Discriminator)' 역할을 합니다. 런타임에서 `switch` 문 등을 통해 이 리터럴 값을 비교함으로써, TypeScript는 현재 처리 중인 객체가 정확히 어떤 타입인지 자동으로 좁혀(Narrowing) 안전한 접근을 보장합니다 [4-6].
|
||||
|
||||
* **리터럴 타입 보존 및 확장(Widening) 방지:** TypeScript는 구체적인 리터럴 값을 더 넓은 범주의 원시 타입으로 확장(Widening)하여 추론하는 경향이 있습니다(예: 특정 문자열을 단순 `string` 타입으로 추론).
|
||||
* 객체를 정의할 때 이러한 확장을 막고 본래의 정밀한 리터럴 타입을 보존하기 위해 `satisfies` 연산자를 활용할 수 있습니다. 이를 통해 객체의 구조가 조건을 만족하는지 검증하면서도 속성들의 구체적인 리터럴 타입을 그대로 유지할 수 있습니다 [7-9].
|
||||
* 또한, `as const` 단언(Assertion)을 사용하면 값을 깊은 읽기 전용(deeply readonly) 상태로 만들면서, 컴파일러가 해당 값을 원시 타입이 아닌 정확한 리터럴 값으로 좁히도록 강제할 수 있습니다 [10].
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[유니온 타입 (Union Types)]], [[식별 가능한 유니온 (Discriminated Unions)]], [[타입 좁히기 (Type Narrowing)]], [[satisfies 연산자]], [[as const 단언]]
|
||||
- **Projects/Contexts:** [[네트워크 응답 상태 모델링 (loading, success, failed 상태 구분)]], [[Redux 액션 및 API 응답 처리 패턴]]
|
||||
- **Contradictions/Notes:** 리터럴 타입 자체는 단일한 값만을 허용하기에 그 자체로만 쓰이면 제한적이지만, 유니온 타입 및 `satisfies`, `as const` 와 같은 TypeScript의 고급 기능들과 결합할 때 비로소 예측 불가능한 런타임 오류를 막아주고 자동 완성(IntelliSense)을 극대화하는 컴파일 타임의 핵심 안전장치로 작동합니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-18*
|
||||
- Raw Source: [[00_Raw/2026-04-20/리터럴 타입 (Literal Types).md]]
|
||||
---
|
||||
Reference in New Issue
Block a user