--- id: P-REINFORCE-AUTO-648FC3 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Excess Property Checking" --- # [[Excess Property Checking|Excess Property Checking]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > TypeScript의 Excess Property Checking(κ³Όμž‰ 속성 체크)은 객체 λ¦¬ν„°λŸ΄μ΄ λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήλ˜κ±°λ‚˜ ν•¨μˆ˜μ˜ 인수둜 전달될 λ•Œ μ˜ˆμƒμΉ˜ λͺ»ν•œ 초과 속성을 κ°μ§€ν•˜κ³  νƒ€μž… μ—λŸ¬λ₯Ό ν‘œμΆœν•˜λŠ” κΈ°λŠ₯이닀 [1-3]. μ΄λŠ” TypeScript의 κΈ°λ³Έ λ™μž‘μΈ ꡬ쑰적 타이핑(Structural Typing) κ·œμΉ™μ„ 더 μ—„κ²©ν•˜κ²Œ μ μš©ν•˜λŠ” μ˜ˆμ™Έμ μΈ μ‚¬λ‘€λ‘œ λ³Ό 수 μžˆλ‹€ [1]. κ°œλ°œμžκ°€ 속성 이름에 μ˜€νƒ€λ₯Ό λ‚΄λŠ” λ“±μ˜ μ‹€μˆ˜λ‘œ 인해 λ°œμƒν•  수 μžˆλŠ” μ˜λ„μΉ˜ μ•Šμ€ λŸ°νƒ€μž„ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‘΄μž¬ν•œλ‹€ [4-6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λ™μž‘ 원리와 λͺ©μ ** TypeScript의 νƒ€μž… μ‹œμŠ€ν…œμ€ 기본적으둜 객체가 μš”κ΅¬λ˜λŠ” μ΅œμ†Œν•œμ˜ μ†μ„±λ§Œ κ°€μ§€κ³  μžˆλ‹€λ©΄ ν˜Έν™˜μ„±μ„ ν—ˆμš©ν•˜λŠ” ꡬ쑰적 타이핑(Structural Typing, 일λͺ… 덕 타이핑)을 λ”°λ₯Έλ‹€ [7-9]. κ·ΈλŸ¬λ‚˜ λŒ€μƒ νƒ€μž…μ— 직접 객체 λ¦¬ν„°λŸ΄μ„ ν• λ‹Ήν•˜κ±°λ‚˜ ν•¨μˆ˜μ˜ 인자둜 객체 λ¦¬ν„°λŸ΄μ„ λ„˜κΈΈ λ•ŒλŠ” νŠΉλ³„νžˆ Excess Property Checking이 λ°œλ™ν•˜μ—¬ μ„ μ–Έλ˜μ§€ μ•Šμ€ μž‰μ—¬ 속성이 μžˆλŠ”μ§€ μ—„κ²©ν•˜κ²Œ κ²€μ‚¬ν•œλ‹€ [1, 3, 6, 10-12]. μ΄λŠ” κ°œλ°œμžκ°€ 초과 속성을 μ „λ‹¬ν•˜λ €λŠ” μ˜λ„κ°€ 없을 것이라고 κ°€μ •ν•˜μ—¬ μ˜€νƒ€(예: `color` λŒ€μ‹  `colour`) λ“±μ˜ μ‹€μˆ˜λ₯Ό 컴파일 μ‹œμ μ— ν¬μ°©ν•˜κΈ° μœ„ν•¨μ΄λ‹€ [4-6, 9]. * **ν•œκ³„μ  및 우회 문제** Excess Property Checking은 객체 λ¦¬ν„°λŸ΄μ„ 쀑간 λ³€μˆ˜(intermediate variable)에 λ¨Όμ € ν• λ‹Ήν•œ λ’€ λ‹€λ₯Έ λ³€μˆ˜λ‚˜ 인수둜 전달할 κ²½μš°μ—λŠ” μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 맹점이 μžˆλ‹€ [1, 3, 4, 12, 13]. 쀑간 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ λŒ€μƒ νƒ€μž…κ³Ό μ΅œμ†Œ ν•˜λ‚˜μ˜ 속성이라도 μΌμΉ˜ν•œλ‹€λ©΄, TypeScriptλŠ” 초과 속성이 μžˆλ”λΌλ„ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ‹€ [14]. (λ§Œμ•½ 곡톡 속성이 ν•˜λ‚˜λ„ μ—†λ‹€λ©΄ 'μ•½ν•œ νƒ€μž… 검사(Weak Type Detection)' κ·œμΉ™μ— μ˜ν•΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€ [3, 15]). λ˜ν•œ λͺ…μ‹œμ μΈ λ°˜ν™˜ νƒ€μž… μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ—†λŠ” λ¬Έλ§₯적인 ν• λ‹Ήμ—μ„œλ„ μ—λŸ¬λ₯Ό μ œλŒ€λ‘œ μž‘μ•„λ‚΄μ§€ λͺ»ν•˜λŠ” ν•œκ³„κ°€ 보고된 λ°” μžˆλ‹€ [16]. * **보완 μ „λž΅ (`satisfies` 및 μ»€μŠ€ν…€ νƒ€μž…)** 객체 λ¦¬ν„°λŸ΄μ„ 쀑간 λ³€μˆ˜λ₯Ό 톡해 μ „λ‹¬ν•˜λ©΄μ„œ λ°œμƒν•˜λŠ” 우회 문제λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ TypeScript 4.9μ—μ„œ λ„μž…λœ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•  수 μžˆλ‹€ [17, 18]. `satisfies` μ—°μ‚°μžλŠ” 객체의 ꡬ체적인 κ°’ ν˜•νƒœλ₯Ό μœ μ§€ν•˜λ©΄μ„œλ„ λŒ€μƒ νƒ€μž…μ— μ •μ˜λ˜μ§€ μ•Šμ€ 초과 속성을 μ—„κ²©νžˆ κ±ΈλŸ¬λ‚΄μ–΄ νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•œλ‹€ [18-21]. λ˜ν•œ, μ œλ„€λ¦­κ³Ό `never` νƒ€μž…μ„ κ²°ν•©ν•˜μ—¬ λŒ€μƒ μΈν„°νŽ˜μ΄μŠ€μ™€ μ‹€μ œ μž…λ ₯을 λΉ„κ΅ν•˜κ³  μž‰μ—¬ 속성을 μž‘μ•„λ‚΄λŠ” μž¬κ·€μ  μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ λ§Œλ“€μ–΄ μˆ˜λ™μœΌλ‘œ 초과 속성을 μ°Ύμ•„λ‚Ό μˆ˜λ„ μžˆμ§€λ§Œ, μ΄λŠ” νƒ€μž… 검사 μ„±λŠ₯에 뢀정적인 영ν–₯을 λ―ΈμΉ  수 μžˆμ–΄ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [22-24]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Structural Typing|Structural Typing]], [[Satisfies Operator|satisfies Operator]], [[약ᄒᅑᆫ ᄐᅑ압 α„€α…₯ᆷᄉᅑ(Weak Type Detection)|Weak Type Detection]] - **Projects/Contexts:** [[TypeScript-Type-System|TypeScript Type System]], ESLint Rule Proposals (no-excess-properties) - **Contradictions/Notes:** μ†ŒμŠ€ [25]에 λ”°λ₯΄λ©΄, Facebook의 Flow처럼 초과 속성을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ •ν™•ν•œ 객체 νƒ€μž…(`Exact`) ꡬ문을 TypeScript에도 λ„μž…ν•˜μžλŠ” 였랜 μ œμ•ˆμ΄ μžˆμ—ˆμœΌλ‚˜, TypeScript νŒ€μ€ Excess Property Checking 자체λ₯Ό 더 λ˜‘λ˜‘ν•˜κ²Œ κ°œμ„ ν•˜λŠ” λ°©ν–₯을 μ„ ν˜Έν•œλ‹€. ν•œνŽΈ, ESLint의 린트 룰을 톡해 초과 속성 검사λ₯Ό κ°•μ œν•˜λ €λŠ” μ‹œλ„μ— λŒ€ν•΄μ„œλŠ”, TypeScript의 λͺ¨λ“  객체가 본질적으둜 ꡬ쑰적 타이핑에 μ˜ν•΄ "inexact"ν•œ νŠΉμ„±μ„ κ°–κΈ° λ•Œλ¬Έμ— 린트 λ£° 적용 μ‹œ λ…Έμ΄μ¦ˆ(False Positive)κ°€ κ³Όλ„ν•˜κ²Œ λ°œμƒν•  수 μžˆλ‹€λŠ” 반둠이 μ œκΈ°λœλ‹€ [26, 27]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/Excess Property Checking.md ---