--- id: P-REINFORCE-AI-DISCRIMINATED-UNIONS category: "[[10_Wiki/πŸ’‘ Topics/AI]]" confidence_score: 0.98 tags: [TypeScript, TypeSystem, Patterns, Safety] last_reinforced: 2026-04-20 --- # [[Discriminated-Unions]] (κ΅¬λ³„λœ μœ λ‹ˆμ˜¨) ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "μ΄λ¦„ν‘œλ₯Ό 보고 νƒ€μž…μ„ κ°€λ €λ‚΄λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ κ°€μž₯ μš°μ•„ν•œ λΆ„κΈ° 처리." 곡톡 속성(λ¦¬ν„°λŸ΄ νƒ€μž…)을 μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ΄ μ„žμΈ μœ λ‹ˆμ˜¨μ—μ„œ νŠΉμ • νƒ€μž…μ„ μ™„λ²½ν•˜κ²Œ μΆ”λ‘ ν•΄λ‚΄λŠ” νŒ¨ν„΄μ΄λ‹€. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **The Schema**: - λͺ¨λ“  νƒ€μž…μ΄ λ™μΌν•œ μ΄λ¦„μ˜ 속성(예: `kind` λ˜λŠ” `type`)을 κ°€μ§€λ˜, κ·Έ 값은 κ³ μœ ν•œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ΄μ–΄μ•Ό ν•œλ‹€. - `type Shape = { kind: 'circle'; radius: number } | { kind: 'rect'; width: number; height: number };` - **Type Guarding**: - `if` ν˜Ήμ€ `switch` 문으둜 `kind` 값을 μ²΄ν¬ν•˜λ©΄, μŠ€μ½”ν”„ λ‚΄λΆ€μ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μžλ™μœΌλ‘œ νƒ€μž…μ„ μ’ν˜€μ€€λ‹€(Narrowing). - **Core Benefit**: - μ˜€νƒ€ λ°©μ§€ 및 λŸ°νƒ€μž„ μ•ˆμ •μ„± 확보. - λͺ¨λ“  μΌ€μ΄μŠ€λ₯Ό μ²˜λ¦¬ν–ˆλŠ”μ§€ κ²€μ‚¬ν•˜λŠ” **Exhaustiveness Checking** κ΅¬ν˜„ κ°€λŠ₯. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (RL Update) - κ΅¬λ³„λœ μœ λ‹ˆμ˜¨μ€ κ°•λ ₯ν•˜μ§€λ§Œ, 데이터 μ†ŒμŠ€κ°€ μ™ΈλΆ€(API λ“±)인 경우 μˆ˜μ‹  데이터에 μ‹€μ œλ‘œ ν•΄λ‹Ή 'μ΄λ¦„ν‘œ'κ°€ μžˆλŠ”μ§€ 보μž₯ν•  수 μ—†λ‹€. λ”°λΌμ„œ Zod와 같은 λŸ°νƒ€μž„ μŠ€ν‚€λ§ˆ 검증 λ„κ΅¬λ‘œ μž…κ΅¬λ₯Ό λ³΄ν˜Έν•œ λ’€ λ‚΄λΆ€ λ‘œμ§μ—μ„œ μœ λ‹ˆμ˜¨μ„ μ‚¬μš©ν•˜λŠ” 것이 λͺ¨λ²” 사둀닀. ## πŸ”— 지식 μ—°κ²° (Graph) - Related: [[Exhaustiveness-Checking]] , [[Type-Guards]] - Context: [[Redux-Reducers-Design]]