#Typescript
#Infer Type
#Tutorial
Written by Paul
๋ค์ด๊ฐ๋ฉฐinfer๋ ๋ฌด์์ธ๊ฐ?1. Promise ๋ด๋ถ ํ์
์ถ์ถ2. ๋ฐฐ์ด ์์ ํ์
์ถ์ถ3. ํจ์ ๋ฐํ ํ์
์ถ์ถ4. ํจ์ ๋งค๊ฐ๋ณ์ ํ์
์ถ์ถ5. ํด๋์ค ์์ฑ์ ๋งค๊ฐ๋ณ์ ํ์
์ถ์ถ6. Promise ์ฒด์ธ ํ์ด๋ด๊ธฐ7. ์ ๋์จ ํ์
์์ ๋ถ๋ฐฐ๋๋ ํน์ง์ ๋ฆฌ๋ง๋ฌด๋ฆฌ
๋ค์ด๊ฐ๋ฉฐ
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๋ ์กฐ๊ฑด๋ถ ํ์ ์์ ๋ด๋ถ ํ์ ์ ๋ณ์์ฒ๋ผ ์บก์ฒํ๋ ํค์๋
- ๋ํ์ ์ธ ํ์ฉ ํจํด:
Promise<T>
๋ด๋ถ ํ์ ์ถ์ถ- ๋ฐฐ์ด ์์ ํ์ ์ถ์ถ
- ํจ์ ๋ฐํ ํ์ / ๋งค๊ฐ๋ณ์ ํ์ ์ถ์ถ
- ์์ฑ์ ๋งค๊ฐ๋ณ์ ํ์ ์ถ์ถ
- ์ฌ๊ท์ ์ผ๋ก ์ค์ฒฉ ํ์ ํ์ด๋ด๊ธฐ
- infer๋ฅผ ์ ์ฐ๋ฉด ๋ณต์กํ ํ์ ๊ตฌ์กฐ๋ฅผ ๋จ์ํ๊ฒ ๊ฐ๊ณตํ ์ ์๊ณ , ์ ํธ๋ฆฌํฐ ํ์ ์ ์์ ํต์ฌ์ด ๋ฉ๋๋ค.
๋ง๋ฌด๋ฆฌ
TypeScript ํ์
์์คํ
์ ๋จ์ํ ๊ฒ์ฆ ๋๊ตฌ๋ฅผ ๋์ด, ํ์
์์ฒด๋ก ๋ก์ง์ ํํํ ์ ์๋ ์ธ์ด์
๋๋ค.
infer๋ ๊ทธ์ค์์๋ โํจํด ๋งค์นญ ๊ธฐ๋ฐ ์ถ๋ก โ์ด๋ผ๋ ํน๋ณํ ๋ฌด๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ค์ ๊ธ์์๋ ์ด์ ํจ๊ป ์์ฃผ ์ฐ์ด๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฒ, ํํ ์นด์ดํ
(tuple counting)์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ infer์ ์กฐํฉํ๋ฉด ์ฌ๊ท์ ํ์
ํ๋ก๊ทธ๋๋ฐ์ ์ง์๋ฅผ ๊ฒฝํํ์ค ์ ์์ต๋๋ค. ๐
ย