--- id: P-REINFORCE-AUTO-D3F069 category: "[[10_Wiki/πŸ’‘ Topics/Design & Experience]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Type Declaration" --- # [[Type Declaration]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > νƒ€μž… μ„ μ–Έ(Type Declaration)은 TypeScriptμ—μ„œ λ³€μˆ˜, ν•¨μˆ˜, 객체 λ“±μ˜ 데이터 ν˜•νƒœμ™€ κ·œμΉ™μ„ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ 예츑 κ°€λŠ₯성을 λ†’μ΄λŠ” 과정이닀[1, 2]. 주둜 `type` 별칭(Type Alias)μ΄λ‚˜ `interface` ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜ν•˜λ©°, μ™ΈλΆ€ μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리 μ‚¬μš© μ‹œμ—λŠ” κ΅¬ν˜„λΆ€ 없이 νƒ€μž… μ •λ³΄λ§Œ μ œκ³΅ν•˜λŠ” `.d.ts` μ„ μ–Έ νŒŒμΌμ„ 톡해 ν™œμš©λœλ‹€[3]. νƒ€μž… 단언(Type Assertion) 방식과 달리, λͺ…μ‹œμ μΈ νƒ€μž… 선언을 ν™œμš©ν•˜λ©΄ 컴파일러의 μ—„κ²©ν•œ ꡬ쑰적 νƒ€μž… 검사λ₯Ό 톡해 λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό 사전에 λ°©μ§€ν•  수 μžˆλ‹€[1]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λͺ…μ‹œμ  νƒ€μž… μ„ μ–Έμ˜ μ•ˆμ •μ„± 보μž₯**: λ³€μˆ˜λ‚˜ 객체λ₯Ό 생성할 λ•Œ νƒ€μž… 단언(`as Type`)을 μ‚¬μš©ν•˜λ©΄ ν•„μˆ˜ 속성이 λˆ„λ½λ˜λ”λΌλ„ νƒ€μž… μ—λŸ¬λ₯Ό λ¬΄μ‹œν•˜κ³  λ„˜μ–΄κ°€ λŸ°νƒ€μž„ 버그λ₯Ό μœ λ°œν•  수 μžˆλ‹€[1]. 반면, μ˜¬λ°”λ₯Έ νƒ€μž… μ„ μ–Έ(Type Declaration) 문법을 μ‚¬μš©ν•΄ 값을 ν• λ‹Ήν•˜λ©΄ μš”κ΅¬λ˜λŠ” 속성이 없을 λ•Œ μ»΄νŒŒμΌλŸ¬κ°€ μ¦‰μ‹œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ μ•ˆμ „ν•œ μ½”λ“œλ₯Ό κ°•μ œν•œλ‹€[1, 4]. - **Interface와 Type Alias의 μ„ μ–Έ 방식 차이**: TypeScriptμ—μ„œ ν˜•νƒœλ₯Ό μ„ μ–Έν•˜λŠ” 두 κ°€μ§€ μ£Όμš” λ„κ΅¬λŠ” μΈν„°νŽ˜μ΄μŠ€(Interface)와 νƒ€μž… 별칭(Type Alias)이닀[2]. μΈν„°νŽ˜μ΄μŠ€λŠ” λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ 번 μ„ μ–Έν•  경우 TypeScriptκ°€ 이λ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜λŠ” 'μ„ μ–Έ 병합(Declaration Merging)'을 μ§€μ›ν•˜μ—¬ 라이브러리 ν™•μž₯에 μœ λ¦¬ν•˜λ‹€[5]. 반면, νƒ€μž… 별칭은 λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μž¬μ„ μ–Έν•  수 μ—†μ–΄ 더 μ—„κ²©ν•œ μƒνƒœ 관리가 κ°€λŠ₯ν•˜λ©°, μœ λ‹ˆμ˜¨(Union)μ΄λ‚˜ νŠœν”Œ(Tuple) λ“±μ˜ λ³΅μž‘ν•œ νƒ€μž…μ„ μ„ μ–Έν•  λ•Œ ν™œμš©λœλ‹€[2, 5, 6]. - **μ„ μ–Έ 파일 (Declaration Files, `.d.ts`)**: JavaScript 라이브러리λ₯Ό TypeScript ν™˜κ²½μ—μ„œ μ‚¬μš©ν•  λ•ŒλŠ” νƒ€μž… μ •μ˜κ°€ ν•„μš”ν•˜λ‹€. 이λ₯Ό μœ„ν•΄ μ‹€μ œ κ΅¬ν˜„ μ½”λ“œ 없이 νƒ€μž… μ •λ³΄λ§Œμ„ μ œκ³΅ν•˜λŠ” `.d.ts` μ„ μ–Έ νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν•΄λ‹Ή 라이브러리의 ν˜•νƒœλ₯Ό μ•Œλ €μ€„ 수 μžˆλ‹€[3]. - **λΆˆν•„μš”ν•œ νƒ€μž… μ„ μ–Έμ˜ μƒλž΅ (Type Inference)**: μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ λͺ¨λ“  곳에 λͺ…μ‹œμ μΈ νƒ€μž… 선언을 ν•  ν•„μš”λŠ” μ—†λ‹€. TypeScriptκ°€ μ΄ˆκΉƒκ°’μ„ 기반으둜 κ°’μ˜ νƒ€μž…μ„ μ™„λ²½νžˆ μœ μΆ”(Type Inference)ν•  수 μžˆλŠ” μƒν™©μ—μ„œλŠ” ꡳ이 λͺ…μ‹œμ μΈ νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•Šκ³  μ‹œμŠ€ν…œμ˜ 좔둠을 μ‹ λ’°ν•˜λŠ” 것이 μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ³  가독성 있게 μœ μ§€ν•˜λŠ” λͺ¨λ²” 사둀이닀[7]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Design & Experience λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Type Alias]], [[Interface]], [[Type Assertion]], [[Declaration Merging]], [[Type Inference]] - **Projects/Contexts:** [[TypeScript Type System]], [[TypeScript Best Practices]] - **Contradictions/Notes:** 객체 νƒ€μž…μ„ μ„ μ–Έν•  λ•Œ `interface`와 `type` 쀑 μ–΄λŠ 것을 μ‚¬μš©ν• μ§€μ— λŒ€ν•œ 개발자 κ°„μ˜ μ„ ν˜Έλ„ λ…ΌμŸμ΄ μ‘΄μž¬ν•œλ‹€. μΌλΆ€λŠ” μ„ μ–Έ λ³‘ν•©μ˜ 이점과 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ `interface`λ₯Ό μ„ ν˜Έν•˜μ§€λ§Œ[8-10], λ‹€λ₯Έ μ§„μ˜μ—μ„œλŠ” μ˜λ„μΉ˜ μ•Šμ€ μ„ μ–Έ 병합에 μ˜ν•œ μ˜€μž‘λ™μ„ 막고 였λ₯˜λ₯Ό λͺ…ν™•νžˆ 작기 μœ„ν•΄ `type` 선언을 μ—„κ²©νžˆ μ‚¬μš©ν•˜λŠ” 것을 μ§€ν–₯ν•œλ‹€[6, 11]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/Type Declaration.md]] ---