--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Excess Property Checking|Excess Property Checking]] last_updated: 2026-05-02 --- # [[Excess Property Checking|Excess Property Checking]] ## ๐Ÿ“Œ Brief Summary > TypeScript์˜ Excess Property Checking(๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ)์€ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋  ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ดˆ๊ณผ ์†์„ฑ์„ ๊ฐ์ง€ํ•˜๊ณ  ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ํ‘œ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค [1-3]. ์ด๋Š” TypeScript์˜ ๊ธฐ๋ณธ ๋™์ž‘์ธ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘([[Structural Typing|Structural Typing]]) ๊ทœ์น™์„ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•˜๋Š” ์˜ˆ์™ธ์ ์ธ ์‚ฌ๋ก€๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค [1]. ๊ฐœ๋ฐœ์ž๊ฐ€ ์†์„ฑ ์ด๋ฆ„์— ์˜คํƒ€๋ฅผ ๋‚ด๋Š” ๋“ฑ์˜ ์‹ค์ˆ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜๋„์น˜ ์•Š์€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค [4-6]. --- > "๋„ˆ ์ •์ฒด๊ฐ€ ๋ญ์•ผ? ์‹œํ‚ค์ง€ ์•Š์€ ๊ฑด ํ•˜์ง€ ๋งˆ." ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ๋•Œ, ์ •์˜๋˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์˜คํƒ€๋‚˜ ์‹ค์ˆ˜(Mistyping)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” TypeScript์˜ ์•ˆ์ „์žฅ์น˜๋‹ค. --- > TypeScript์˜ ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ(Excess Property Checking, EPC)๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์ง์ ‘ ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋  ๋•Œ, ๋Œ€์ƒ ํƒ€์ž…์— ์ •์˜๋˜์ง€ ์•Š์€ ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค[1-4]. ์ด๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘([[Structural Typing|Structural Typing]])์˜ ์œ ์—ฐํ•จ์œผ๋กœ ์ธํ•ด ์†์„ฑ ์ด๋ฆ„์˜ ์˜คํƒ€๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ž…๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐฉ์ง€ํ•˜๋Š”TypeScript์˜ ํ•ต์‹ฌ ๋ฐฉ์–ด ๊ธฐ์ œ๋กœ ์ž‘๋™ํ•œ๋‹ค[5-7]. --- > ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ(Excess Property Checking)๋Š” TypeScript์—์„œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์ง์ ‘ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ๋•Œ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ(์ •์˜๋˜์ง€ ์•Š์€) ์ž‰์—ฌ ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [1-4]. ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ์œ ์—ฐ์„ฑ ์†์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํƒ€๋‚˜ ์ž˜๋ชป๋œ ์†์„ฑ ์ „๋‹ฌ ์‹ค์ˆ˜๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ํฌ์ฐฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ์–ด์„  ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [5-7]. --- > ์ดˆ๊ณผ ์†์„ฑ ๊ฒ€์‚ฌ(Excess Property Checking)๋Š” TypeScript์—์„œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์ง์ ‘ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ(์ •์˜๋˜์ง€ ์•Š์€) ์†์„ฑ์ด ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฐ์ง€ํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [1-5]. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์†์„ฑ ์ด๋ฆ„์— ์˜คํƒ€๋ฅผ ๋‚ด๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์†์„ฑ์„ ์ „๋‹ฌํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜์—ฌ ์˜๋„์น˜ ์•Š์€ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [6-8]. ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ์ค‘๊ฐ„ ๋ณ€์ˆ˜์— ๋จผ์ € ํ• ๋‹นํ•œ ํ›„ ์ „๋‹ฌํ•˜๋ฉด ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ์›์น™์— ๋”ฐ๋ผ ์ด ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•˜๊ฒŒ ๋˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค [6, 9, 10]. ## ๐Ÿ“– Core 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]. --- - **Object Literal Restriction**: ๋ณ€์ˆ˜์— ๋ฏธ๋ฆฌ ๋‹ด์ง€ ์•Š๊ณ  ์ง์ ‘ `{...}` ํ˜•ํƒœ๋กœ ๋„˜๊ธธ ๋•Œ๋งŒ ๋ฐœ๋™ํ•จ. - **[[Structural Typing|Structural Typing]] Exception**: TypeScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ๋”ฐ๋ฅด์ง€๋งŒ, ๋ฆฌํ„ฐ๋Ÿด ํ• ๋‹น ์‹œ์—๋Š” '์—„๊ฒฉํ•œ ํƒ€์ž… ์ผ์น˜'๋ฅผ ์š”๊ตฌํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ์ค„์ž„. - **Bypassing Methods**: - ๋ณ€์ˆ˜์— ํ• ๋‹น ํ›„ ์ „๋‹ฌ. - ํƒ€์ž… ๋‹จ์–ธ(`as AnyType`) ์‚ฌ์šฉ. - ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜(`[key: string]: any`) ์ถ”๊ฐ€. --- - **๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉ์ **: TypeScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด์˜ ํ˜•ํƒœ(๊ตฌ์กฐ)๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ํƒ€์ž…์˜ ํ˜ธํ™˜์„ฑ์„ ์ธ์ •ํ•˜๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘(๋• ํƒ€์ดํ•‘) ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค[7-9]. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์ƒ ํƒ€์ž…์˜ ์†์„ฑ์„ ์ถฉ์กฑํ•˜๋”๋ผ๋„ ์˜คํƒ€(์˜ˆ: `color` ๋Œ€์‹  `colour`๋ฅผ ์ž…๋ ฅ)์™€ ๊ฐ™์€ ์‹ค์ˆ˜๋กœ ์ž‰์—ฌ ์†์„ฑ์ด ํฌํ•จ๋˜๋ฉด ์˜๋„์น˜ ์•Š์€ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค[5, 6]. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด TypeScript๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•ด ์˜ˆ์™ธ์ ์œผ๋กœ ๋” ์—„๊ฒฉํ•œ ์žฃ๋Œ€๋ฅผ ๋“ค์ด๋Œ€๋Š” '๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ'๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค[1, 5]. - **๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ•œ๊ณ„ (์šฐํšŒ ํ˜„์ƒ)**: ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋ณ€์ˆ˜์— ์ง์ ‘ ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค[3, 5]. ๋งŒ์•ฝ ๋ณ€์ˆ˜๋ฅผ ๋จผ์ € ์„ ์–ธํ•œ ํ›„ ์ด๋ฅผ ๋‹ค๋ฅธ ํƒ€์ž…์— ๊ฐ„์ ‘์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋‘ ๊ฐ์ฒด ์‚ฌ์ด์— ์ตœ์†Œ ํ•˜๋‚˜์˜ ๊ณตํ†ต ์†์„ฑ๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค[10-12]. ์ด๋Š” ์‹œ์Šคํ…œ์ด "์ตœ์†Œ ์š”๊ฑด ์ถฉ์กฑ"์ด๋ผ๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ๊ธฐ๋ณธ ์›์น™์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[12]. (๋‹จ, ์„ ํƒ์  ์†์„ฑ๋งŒ ๊ฐ€์ง„ '์•ฝํ•œ ํƒ€์ž…(Weak Type)'์˜ ๊ฒฝ์šฐ์—๋Š” ๊ณตํ†ต ์†์„ฑ์ด ์•„์˜ˆ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์•ฝํ•œ ํƒ€์ž… ํƒ์ง€๊ฐ€ ์ž‘๋™ํ•œ๋‹ค[13, 14].) - **์šฐํšŒ๋กœ ์ธํ•œ ๋ถ€์ž‘์šฉ**: ๊ฐ„์ ‘ ํ• ๋‹น ๋“ฑ์„ ํ†ตํ•ด ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๊ฐ€ ์šฐํšŒ๋˜๋ฉด, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ž‰์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ˆจ์–ด๋“ค ์ˆ˜ ์žˆ๋‹ค[12]. ์ด๋Š” React ์ปดํฌ๋„ŒํŠธ ๋“ฑ์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์€ ์†์„ฑ์ด DOM์œผ๋กœ ๋„˜์–ด๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ ์‹œ ๋ณด์•ˆ ์œ ์ถœ์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค[12, 15]. - **`satisfies` ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•œ ๋ฐฉ๋น„**: `as` ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•œ ํƒ€์ž… ์บ์ŠคํŒ…([[Type Casting|Type Casting]])์€ ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„ ์ž ์žฌ์ ์ธ ์—๋Ÿฌ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค[16]. ์ด ๊ฐ™์€ ์ทจ์•ฝ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด TypeScript 4.9์— ๋„์ž…๋œ `satisfies` ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด๊ฐ€ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํƒ€์ž…์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ์—„๊ฒฉํžˆ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ณผ์ž‰ ์†์„ฑ์˜ ์œ ์ž…์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์ฐจ๋‹จํ•œ๋‹ค[17, 18]. ๋”๋ถˆ์–ด ๊ฐ์ฒด์˜ ๊ตฌ์ฒด์ ์ธ ๊ฐ’(๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ๋“ฑ)์„ ์œ ์ง€ํ•ด ์ •๋ฐ€ํ•œ ํƒ€์ž… ์ถ”๋ก ๊ณผ ํƒ€์ž… ์ขํžˆ๊ธฐ(Narrowing)๋ฅผ ๋•๋Š” ํ˜์‹ ์ ์ธ ์ˆ˜๋น„ ์ „๋žต์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค[18-20]. --- - **๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ๋ณด์™„ ์žฅ์น˜**: TypeScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์š”๊ตฌ๋˜๋Š” ์ตœ์†Œํ•œ์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํƒ€์ž… ํ˜ธํ™˜์„ฑ์„ ์ธ์ •ํ•˜๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘([[Structural Typing|Structural Typing]], ์ผ๋ช… ๋• ํƒ€์ดํ•‘)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [7, 8]. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด `color`๋ฅผ `colour`๋กœ ์ž˜๋ชป ์ž…๋ ฅํ•˜๋Š” ๋“ฑ์˜ ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [6]. TypeScript๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‰์—ฌ ์†์„ฑ์„ ์ „๋‹ฌํ•  ์˜๋„๊ฐ€ ์—†์—ˆ์„ ๊ฒƒ์ด๋ผ ๊ฐ„์ฃผํ•˜์—ฌ ๋” ์—„๊ฒฉํ•œ ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋ฅผ ์ ์šฉํ•ด ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [5-7]. - **๋ฐœ๋™ ์กฐ๊ฑด ๋ฐ ํ•œ๊ณ„ (์šฐํšŒ๋กœ)**: ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋Š” "๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด"์ด ๋Œ€์ƒ ํƒ€์ž…์— ์ง์ ‘ ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋  ๋•Œ๋งŒ ํŠน๋ณ„ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [3-5]. ๋งŒ์•ฝ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋จผ์ € ์ค‘๊ฐ„ ๋ณ€์ˆ˜์— ์„ ์–ธ ๋ฐ ํ• ๋‹นํ•œ ๋’ค, ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๋Œ€์ƒ ํƒ€์ž…์— ๊ฐ„์ ‘์ ์œผ๋กœ ํ• ๋‹นํ•˜๋ฉด ์ด ๊ธฐ๋Šฅ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [3, 5, 9, 10]. ๋ณ€์ˆ˜๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์˜ ๊ธฐ๋ณธ ์›์น™์ธ "์ตœ์†Œ ์š”๊ฑด ์ถฉ์กฑ"์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€์ƒ ํƒ€์ž…๊ณผ ์ตœ์†Œ ํ•˜๋‚˜์˜ ์†์„ฑ๋งŒ ๊ฒน์น˜๋ฉด ์ดˆ๊ณผ ์†์„ฑ์ด ์กด์žฌํ•˜๋”๋ผ๋„ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [10, 11]. - **์ž ์žฌ์  ์œ„ํ—˜๊ณผ `satisfies`๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ**: ๊ฐ„์ ‘ ํ• ๋‹น์„ ํ†ตํ•ด ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋ฅผ ์šฐํšŒํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, React ์ปดํฌ๋„ŒํŠธ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ์†์„ฑ์ด ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ๋“ฑ ๋Ÿฐํƒ€์ž„ ๋ฒ„๊ทธ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 12, 13]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด TypeScript 4.9์— ๋„์ž…๋œ `satisfies` ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14]. `satisfies`๋Š” ๊ฐ์ฒด์˜ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…(๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ๋“ฑ)์„ ์žƒ์ง€ ์•Š๊ณ  ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ๋Œ€์ƒ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ฐ„์ ‘ ํ• ๋‹น ์‹œ์—๋„ ๊ณผ์ž‰ ์†์„ฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [14, 15]. --- * **๋ฐœ๋™ ์กฐ๊ฑด ๋ฐ ๋ชฉ์ ** TypeScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์†์„ฑ์˜ ๊ตฌ์กฐ๋งŒ ๋งž์œผ๋ฉด ํƒ€์ž…์ด ํ˜ธํ™˜๋œ๋‹ค๊ณ  ๋ณด๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘([[Structural Typing|Structural Typing]]) ์‹œ์Šคํ…œ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [11]. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋ณ€์ˆ˜์— ์ง์ ‘ ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์—์„œ๋Š” TypeScript๊ฐ€ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ์ดˆ๊ณผ ์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค [1, 4, 6]. ์ด ๊ธฐ๋Šฅ์€ `color`๋ฅผ `colour`๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜คํƒ€๋ฅผ ์žก์•„๋‚ด๋ฉฐ, ํ•ด๋‹น ์ƒํ™ฉ์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดˆ๊ณผ ์†์„ฑ์„ ์˜๋„์ ์œผ๋กœ ์ „๋‹ฌํ•  ํ™•๋ฅ ์ด ๊ทนํžˆ ๋‚ฎ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [6-8]. * **๊ฒ€์‚ฌ์˜ ํ•œ๊ณ„ (์šฐํšŒ ๋ฉ”์ปค๋‹ˆ์ฆ˜)** ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ค‘๊ฐ„ ๋ณ€์ˆ˜์— ๋จผ์ € ํ• ๋‹นํ•œ ๋’ค ์ด๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋ฉด, ์ดˆ๊ณผ ์†์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [6, 9]. ๋‘ ๊ฐ์ฒด๊ฐ€ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ณตํ†ต ์†์„ฑ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด "์ตœ์†Œ ์š”๊ฑด ์ถฉ์กฑ"์ด๋ผ๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘ ์›์น™์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [6, 9, 10]. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ [[JavaScript|JavaScript]]์˜ ์œ ์—ฐํ•œ ํŒจํ„ด์„ ์ง€์›ํ•˜์ง€๋งŒ, ๋™์‹œ์— ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์†์„ฑ์ด ๋Ÿฐํƒ€์ž„์— ์œ ์ž…๋˜์–ด ๋ถ€์ž‘์šฉ(์˜ˆ: React ์ปดํฌ๋„ŒํŠธ์˜ ์˜๋„์น˜ ์•Š์€ ๋ฆฌ๋ Œ๋”๋ง, ์ž˜๋ชป๋œ DOM ์†์„ฑ ์ „๋‹ฌ)์„ ์ผ์œผํ‚ค๋Š” ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 12]. * **์™„ํ™” ๋ฐ ๋ฐฉ์–ด ์ „๋žต** * **`satisfies` ์—ฐ์‚ฐ์ž์˜ ํ™œ์šฉ:** TypeScript 4.9์—์„œ ๋„์ž…๋œ `satisfies` ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„์ ‘ ํ• ๋‹น ๊ณผ์ •์—์„œ๋„ ์—„๊ฒฉํ•œ ์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์ฒด์ ์ธ ๊ฐ’(๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ๋“ฑ)์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋Œ€์ƒ ํƒ€์ž…์— ์ •์˜๋˜์ง€ ์•Š์€ ์ดˆ๊ณผ ์†์„ฑ์ด ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [13, 14]. * **์ปค์Šคํ…€ ์ œ๋„ค๋ฆญ ํƒ€์ž… ํ™œ์šฉ:** ๋” ์—„๊ฒฉํ•œ ์ˆ˜๋™ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ œ๋„ค๋ฆญ ๋งค๊ฐœ๋ณ€์ˆ˜(`T`)์™€ ์˜ˆ์ƒ ํƒ€์ž…(`Shape`)์„ ๋น„๊ตํ•˜์—ฌ ์˜ˆ์ƒ ํƒ€์ž…์— ์—†๋Š” ์†์„ฑ์„ `never` ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. ์ค‘์ฒฉ๋œ ๊นŠ์€ ๊ฐ์ฒด ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋Š” ์žฌ๊ท€์  ํƒ€์ž…์„ ํ™œ์šฉํ•ด ์ดˆ๊ณผ ์†์„ฑ์„ ๊ฐ์ง€ํ•ด๋ƒ…๋‹ˆ๋‹ค [17, 18]. * **๊ด€๋ จ ๋ฆฐํŠธ(Lint) ๊ทœ์น™ ์ œ์•ˆ** ๋ณ€์ˆ˜ ํ• ๋‹น ์‹œ์—๋„ ์ดˆ๊ณผ ์†์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๋ˆ„๋ฝ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด `[[ESLint|ESLint]]-plugin`์— `no-excess-properties`๋ผ๋Š” ๊ทœ์น™์ด ์ œ์•ˆ๋œ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค [19]. ๊ทธ๋Ÿฌ๋‚˜ TypeScript์—์„œ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ "๋ถ€์ •ํ™•์„ฑ(inexact)"์„ ํ—ˆ์šฉํ•˜๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์— ์˜์กดํ•˜๋ฉฐ, ๊ณผ์ž‰ ์†์„ฑ์ด ์‹ค์ œ ๋ฒ„๊ทธ๋กœ ์ด์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๋‹ค๋Š” ์ , ๊ทธ๋ฆฌ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ˆ˜์š”๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์  ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ œ์•ˆ์€ ์ฑ„ํƒ๋˜์ง€ ์•Š๊ณ  ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค [20-22]. ## โš–๏ธ Trade-offs & Caveats - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. --- - ์ด ๊ธฐ๋Šฅ์€ ๋•Œ๋•Œ๋กœ "๋• ํƒ€์ดํ•‘(Duck Typing)์ด๋ผ๋ฉฐ ์™œ ์•ˆ ๋ผ?"๋ผ๋ฉฐ ์ดˆ๋ณด์ž๋“ค์„ ๋‹นํ™ฉํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฆฌํ„ฐ๋Ÿด ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํƒ€(์˜ˆ: `colour` vs `color`)๋ฅผ ๋Ÿฐํƒ€์ž„ ์ด์ „ ๋‹จ๊ณ„์—์„œ ์›์ฒœ ๋ด‰์‡„ํ•˜๊ธฐ ์œ„ํ•œ ์˜๋„์ ์ธ ์„ค๊ณ„๋‹ค. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Structural Typing|Structural Typing]], satisfies Operator, Weak Type Detection - **Projects/Contexts:** TypeScript TypeSystem, [[ESLint|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* --- --- - Related: Structural-Typing-vs-Nominal-Typing , TypeScript-Best-Practices - Concept: Type-Guard --- - **Related Topics:** ๊ตฌ์กฐ์  ํƒ€์ดํ•‘ (Structural Typing), [[satisfies แ„‹แ…งแ†ซแ„‰แ…กแ†ซแ„Œแ…ก|satisfies ์—ฐ์‚ฐ์ž]], ํƒ€์ž… ์บ์ŠคํŒ… (Type Casting), [[แ„‹แ…ฃแ†จแ„’แ…กแ†ซ แ„แ…กแ„‹แ…ตแ†ธ แ„แ…กแ†ทแ„Œแ…ต (Weak Type Detection)|์•ฝํ•œ ํƒ€์ž… ํƒ์ง€ (Weak Type Detection]] - **Projects/Contexts:** ์ฒ ๋ฒฝ ์ˆ˜๋น„๋Œ€" - TypeScript ํƒ€์ž… ์‹œ์Šคํ…œ (์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„), [[React แ„แ…ฅแ†ทแ„‘แ…ฉแ„‚แ…ฅแ†ซแ„แ…ณ Props แ„€แ…ฅแ†ทแ„Œแ…ณแ†ผ|React ์ปดํฌ๋„ŒํŠธ Props ๊ฒ€์ฆ]] - **Contradictions/Notes:** ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ง์ ‘ ํ• ๋‹นํ•  ๋•Œ๋Š” ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๊ฐ€ ๋ฐœ๋™๋˜์–ด ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ์ค‘๊ฐ„ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘ ํ• ๋‹น๋  ๋•Œ๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘ ์›์น™์ด ์ ์šฉ๋˜์–ด ๊ณผ์ž‰ ์†์„ฑ์ด ์กด์žฌํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ชจ์ˆœ์  ๋™์ž‘์„ ๋ณด์ธ๋‹ค[1, 3, 5, 12]. ๋˜ํ•œ `as` ์—ฐ์‚ฐ์ž๋Š” ๊ณผ์ž‰ ์†์„ฑ์„ ๋ฌด์‹œํ•˜๊ณ  ํ• ๋‹น์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ, `satisfies` ์—ฐ์‚ฐ์ž๋Š” ์ดˆ๊ณผ๋œ ์†์„ฑ์— ๋Œ€ํ•ด ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์„ ๊ฐ•์ œํ•œ๋‹ค[16, 21]. --- *Last updated: 2026-04-18* --- --- - **Related Topics:** [[แ„€แ…ฎแ„Œแ…ฉแ„Œแ…ฅแ†จ แ„แ…กแ„‹แ…ตแ„‘แ…ตแ†ผ(Structural Typing)|๊ตฌ์กฐ์  ํƒ€์ดํ•‘(Structural Typing]], satisfies ์—ฐ์‚ฐ์ž, [[แ„‹แ…ฃแ†จแ„’แ…กแ†ซ แ„แ…กแ„‹แ…ตแ†ธ แ„€แ…ฅแ†ทแ„‰แ…ก(Weak Type Detection)|์•ฝํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ(Weak Type Detection]] - **Projects/Contexts:** [[TypeScriptแ„‹แ…ด แ„‹แ…ตแ†ซแ„แ…ฅแ„‘แ…ฆแ„‹แ…ตแ„‰แ…ณ แ„†แ…ตแ†พ แ„€แ…ขแ†จแ„Žแ…ฆ แ„แ…กแ„‹แ…ตแ†ธ แ„‰แ…ฅแ†ฏแ„€แ…จ|TypeScript์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ฐ์ฒด ํƒ€์ž… ์„ค๊ณ„]], [[React แ„แ…ฅแ†ทแ„‘แ…ฉแ„‚แ…ฅแ†ซแ„แ…ณ Props แ„Œแ…ฅแ†ซแ„ƒแ…กแ†ฏ แ„†แ…ตแ†พ แ„‰แ…กแ†ผแ„แ…ข แ„€แ…ชแ†ซแ„…แ…ต|React ์ปดํฌ๋„ŒํŠธ Props ์ „๋‹ฌ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ]] - **Contradictions/Notes:** TypeScript๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ํ•ต์‹ฌ ์ฒ ํ•™์œผ๋กœ ์‚ผ์ง€๋งŒ, "๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด"์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ๋ผ๋Š” ์˜ˆ์™ธ์ ์œผ๋กœ ์—„๊ฒฉํ•œ ์žฃ๋Œ€๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐ’์„ ์ง์ ‘ ์ „๋‹ฌํ•  ๋•Œ์™€ ์ค‘๊ฐ„ ๋ณ€์ˆ˜๋ฅผ ๊ฑฐ์ณ ์ „๋‹ฌํ•  ๋•Œ์˜ ํƒ€์ž… ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋™์ž‘ ๋ฐฉ์‹์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [3, 5, 11]. --- *Last updated: 2026-04-18* --- --- - **Related Topics:** ๊ตฌ์กฐ์  ํƒ€์ดํ•‘ (Structural Typing), [[satisfies แ„‹แ…งแ†ซแ„‰แ…กแ†ซแ„Œแ…ก|satisfies ์—ฐ์‚ฐ์ž]] - **Projects/Contexts:** typescript-eslint - **Contradictions/Notes:** TypeScript๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ์†์„ฑ ์ง‘ํ•ฉ์˜ ํฌํ•จ ๊ด€๊ณ„๋งŒ ํ™•์ธํ•˜๋Š” '๊ตฌ์กฐ์  ํƒ€์ดํ•‘' ์›์น™์„ ๋”ฐ๋ฅด์ง€๋งŒ, ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๋งฅ๋ฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์„ ์˜ˆ์™ธ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ณ  '์ดˆ๊ณผ ์†์„ฑ ๊ฒ€์‚ฌ'๋ผ๋Š” ๋” ์—„๊ฒฉํ•œ ์žฃ๋Œ€๋ฅผ ์ ์šฉํ•œ๋‹ค๋Š” ์ ์—์„œ ๋šœ๋ ทํ•œ ๋™์ž‘์˜ ๋Œ€๋น„๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค [1, 6, 11]. --- *Last updated: 2026-04-18* ---