header_logo

COLDSURF BETA

#Typescript

#Infer Type

#Tutorial

Written by Paul

๋“ค์–ด๊ฐ€๋ฉฐ

TypeScript๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด โ€œํƒ€์ž…์„ ๊บผ๋‚ด์˜ค๊ณ  ์‹ถ๋‹คโ€๋Š” ์š•๊ตฌ๊ฐ€ ์ž์ฃผ ์ƒ๊น๋‹ˆ๋‹ค.
  • Promise<string>์—์„œ string๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค.
  • string[]์—์„œ ์š”์†Œ ํƒ€์ž…๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ๋‹ค.
  • ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๊บผ๋‚ด๊ณ  ์‹ถ๋‹ค.
์ด๋Ÿด ๋•Œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ ์กฐ๊ฑด๋ถ€ ํƒ€์ž…(Conditional Types)๊ณผ infer ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

infer๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

infer๋Š” ์กฐ๊ฑด๋ถ€ ํƒ€์ž… ๋‚ด๋ถ€์—์„œ ํƒ€์ž…์„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์„ ์–ธํ•ด ์ถ”์ถœ(capture) ํ•˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.
์œ„ ์ฝ”๋“œ๋Š” T๊ฐ€ Promise<...>์ผ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ํƒ€์ž…์„ U๋กœ ์ถ”์ถœํ•ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Promise<number>๋ผ๋ฉด ๊ฒฐ๊ณผ๋Š” number๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

1. Promise ๋‚ด๋ถ€ ํƒ€์ž… ์ถ”์ถœ

๊ฐ€์žฅ ์ง๊ด€์ ์ธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

2. ๋ฐฐ์—ด ์š”์†Œ ํƒ€์ž… ์ถ”์ถœ

๋ฐฐ์—ด ์š”์†Œ ํƒ€์ž…๋งŒ ๋ฝ‘๊ณ  ์‹ถ์„ ๋•Œ:

3. ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ํƒ€์ž… ์ถ”์ถœ

์‹ค์ œ๋กœ TypeScript ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ReturnType<T>๊ฐ€ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”์ถœ

๋ฐ˜ํ™˜ ํƒ€์ž…๋งŒํผ์ด๋‚˜ ์ž์ฃผ ์“ฐ์ด๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

5. ํด๋ž˜์Šค ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”์ถœ

ํด๋ž˜์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ๋„ infer๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. Promise ์ฒด์ธ ํ’€์–ด๋‚ด๊ธฐ

Promise<Promise<T>>์ฒ˜๋Ÿผ ์ค‘์ฒฉ๋œ ๊ฒฝ์šฐ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ’€์–ด๋‚ด๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

7. ์œ ๋‹ˆ์˜จ ํƒ€์ž…์—์„œ ๋ถ„๋ฐฐ๋˜๋Š” ํŠน์ง•

์กฐ๊ฑด๋ถ€ ํƒ€์ž…์€ ๋ถ„๋ฐฐ(Distribution) ๋˜๋ฏ€๋กœ, infer๋„ ์œ ๋‹ˆ์˜จ์— ๋…๋ฆฝ์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ •๋ฆฌ

  • infer๋Š” ์กฐ๊ฑด๋ถ€ ํƒ€์ž…์—์„œ ๋‚ด๋ถ€ ํƒ€์ž…์„ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์บก์ฒ˜ํ•˜๋Š” ํ‚ค์›Œ๋“œ
  • ๋Œ€ํ‘œ์ ์ธ ํ™œ์šฉ ํŒจํ„ด:
      1. Promise<T> ๋‚ด๋ถ€ ํƒ€์ž… ์ถ”์ถœ
      1. ๋ฐฐ์—ด ์š”์†Œ ํƒ€์ž… ์ถ”์ถœ
      1. ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ํƒ€์ž… / ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”์ถœ
      1. ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”์ถœ
      1. ์žฌ๊ท€์ ์œผ๋กœ ์ค‘์ฒฉ ํƒ€์ž… ํ’€์–ด๋‚ด๊ธฐ
  • infer๋ฅผ ์ž˜ ์“ฐ๋ฉด ๋ณต์žกํ•œ ํƒ€์ž… ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๊ณ , ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž… ์ œ์ž‘์— ํ•ต์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

TypeScript ํƒ€์ž… ์‹œ์Šคํ…œ์€ ๋‹จ์ˆœํ•œ ๊ฒ€์ฆ ๋„๊ตฌ๋ฅผ ๋„˜์–ด, ํƒ€์ž… ์ž์ฒด๋กœ ๋กœ์ง์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
infer๋Š” ๊ทธ์ค‘์—์„œ๋„ โ€œํŒจํ„ด ๋งค์นญ ๊ธฐ๋ฐ˜ ์ถ”๋ก โ€์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ ๋ฌด๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์ด์™€ ํ•จ๊ป˜ ์ž์ฃผ ์“ฐ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋ฒ•, ํŠœํ”Œ ์นด์šดํŒ…(tuple counting)์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ infer์™€ ์กฐํ•ฉํ•˜๋ฉด ์žฌ๊ท€์  ํƒ€์ž… ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ˆ˜๋ฅผ ๊ฒฝํ—˜ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
ย 

ยฉ 2025 COLDSURF, Inc.

Privacy Policy

Terms of Service

Products