You Can Become A
๋ฆ๊ฒ ์์ํด๋ ๋๊ตฌ๋ ์ง ๋ ธ๋ ฅํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ ์ ์์ด์ !
TypeScript
๐ ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ ํ์ ํจ์ ๋ถ์ & ๋ง๋ค๊ธฐ
์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ง์ด ์ฐ์ด๋ forEach() ๋ map() ๊ฐ์ ๊ณ ์ฐจํจ์๋ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๋น์ฐํ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ์์ ๊ฐ ์ธ์ ๋ง๋ค ํ์ ์ ์ง์ ํด์ฃผ์ด์ผ ๋์๊ฐ๋๋ฐ, ๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ์๋์ ์ด๋ป๊ฒ ํ์ ์ ์ค์ ํ์๊ธฐ์ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๊ณ ์ฐจํจ์์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๊น? ์ค์ ๋ก ์ ๋ค๋ฆญ์ผ๋ก ํ์ ์ด ์ง์ ์ด ๋์์ด์ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๋ฌด๋ฆฌ์์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์ง๊ธ๋ถํฐ ์ค์ ๋ก ํ์ ์คํฌ๋ฆฝํธ์ ์ค์ ๋์ด์๋ ๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ฐจํจ์๊ฐ ์ ๋ค๋ฆญ์ผ๋ก ์ด๋ค์์ผ๋ก ์ค์ ๋์ด์๋์ง ํ๋ํ๋ ๋ถ์ํ๋ฉด์ ํ์คํ ์ ๋ค๋ฆญ์ ์ดํดํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์. ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ค๋ฆญ ํ์ ๋ถ์ํ๊ธฐ forEach ํ์ ๋ถ์ํ๊ธฐ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ forEach ์ ์ ๋ค๋ฆญ์ ๋ถ์ํด๋ณด์. ๋ค์ ์ฝ๋๋ฅผ ํ์ ..
๐ ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ & ๋ค์์คํ์ด์ค ์์คํ ์ดํดํ๊ธฐ
ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ๋ชจ๋์ ๋ ๋ฆฝ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋จ์์ด๋ค. ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๊ณ ๋ชจ๋์ ๊ฒฐํฉํด ํ๋์ ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค. ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค. ์ ์ง ๋ณด์์ ์ฉ์ด์ฑ : ์ค๋ณต ์ฝ๋์ ์ต์ํ ์ ์ญ ์ค์ฝํ ์ค์ผ์ ๋ฐฉ์ง : ์ด๋ฆ ๊ณต๊ฐ์ด ํ์ผ ๋จ์๋ก ์ ํ๋์ด ์ ์ญ ์ด๋ฆ ๊ณต๊ฐ์ ์นจ๋ฒํ์ง ์์ ์ฌ์ฌ์ฉ์ฑ ํฅ์ : ๋ชจ๋์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๊ณต์ ํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ ์ด์ฒ๋ผ ๋ชจ๋์ ์ ์ญ ๋ณ์์ ๊ตฌ๋ถ๋๋ ํ์ผ ์์ฒด ์ ํจ ๋ฒ์(Local Scope)๋ฅผ ๊ฐ์ง๋ค. ์ด๋ ๋ชจ๋ ๋ด ์ ์ธ๋ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ๋ช ์์ ์ผ๋ก ๋ด๋ณด๋ด์ง ์๋ ์ด์ ๋ชจ๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์์์ ์๋ฏธํ๋ค. ์๋ฅผ๋ค์ด ํ์ ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ๋ค์๊ณผ ๊ฐ์ด index.ts , test/test.ts ๋ ํ์ผ์ด ์๋ค๊ณ ํ์. ๊ทธ..
๐ ํ์ ์คํฌ๋ฆฝํธ @๋ฐ์ฝ๋ ์ดํฐ ๊ฐ๋ & ์ฌ์ฉ๋ฒ
ํ์ ์คํฌ๋ฆฝํธ Decorator ๋ ํ์ ์คํฌ๋ฆฝํธ๋ก Angular.js ๋ Nest.js ๊ฐ๋ฐ์ ์งํํ๋ค๋ณด๋ฉด ํ์ฐ์ ์ผ๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ ๊ฒ์ ์ ํ๊ฒ ๋๋ค. ์๋ฐ(Java)๋ฅผ ํด๋ณธ ๋ถ๋ค์ด๋ผ๋ฉด ์ด๋ ธํ ์ด์ ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณผ์ ์์ง๋ง, ์๋ฐ ์ด๋ ธํ ์ด์ ์ ์ปดํ์ผ ํ์์ ์๊ด์ง๋ง ํ์ ์คํฌ๋ฆฝํธ ๋ฐ์ฝ๋ ์ดํฐ๋ ์ปดํ์ผ ํ์์๋ ์๊ดํ์ง ์์, ์คํ๋ ค ํ์ด์ฌ(Python)์ ๋ฐ์ฝ๋ ์ดํฐ์ ๊ฑฐ์ ๋น์ทํ๋ค๊ณ ๋งํ๋๊ฒ ์ณ๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ ์ผ์ข ์ ํจ์ ์ด๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ ๋ง ๊ทธ๋๋ก ์ฝ๋ ์กฐ๊ฐ์ ์ฅ์ํด์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ํ์ ์คํฌ๋ฆฝํธ์์๋ ๊ทธ ๊ธฐ๋ฅ์ ํจ์๋ก ๊ตฌํํ๋ ๊ฒ์ด๋ค. ์๋ฅผ๋ค์ด ๋ฉ์๋ / ํด๋์ค / ํ๋กํผํฐ / ํ๋ผ๋ฏธํฐ ์์ @ํจ์ ๋ฅผ ์ฅ์ํด์ค์ผ๋ก์จ, ์ฝ๋๊ฐ ์คํ(๋ฐํ์)์ด ๋๋ฉด ๋ฐ์ฝ๋ ์ดํฐ ํจ์๊ฐ ์คํ๋์ด, ์ฅ์ํ ๋ฉค๋ฒ๋ฅผ ๋ณด๋ค ํ์ํํ๊ฒ ..
๐ ํ์ ์คํฌ๋ฆฝํธ ๊ณต๋ณ์ฑ & ๋ฐ๊ณต๋ณ์ฑ ์๋ฒฝ ์ดํด
ํ์ ์ ๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์ ์ถ๊ฐํด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ง๋ง, ํ์ ์ ๋ค๋ฃจ๋ ์ธ์ด์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋์ ์ด๋์ ํ์ ์์ฒด๋ฅผ ์ฝ๋ฉํ๊ณ ์๋ ์์ ์ ๋ฐ๊ฒฌํ๊ธฐ๋ ํ๋ค. ํ์ ์ ์ฝ๋ฉํ๋ ๋์ค ๋ง์ด ๋นํฉํ๋ ๊ฐ๋ ์ด ํ์ ๊ฐ์ ๊ด๊ณ ์ด๋ค. ์ด๋ค ํ์ ์ ๋ค๋ฅธ ํ์ ์ ๋ค์ด๊ฐ๋๋ฐ ์ด๋ค ํ์ ์ ์ ๋ค์ด๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋์ค๋ ๋นํฉ์ค๋ฌ์ด ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ๋ค์ ์ด๋ฐ ์ด์ํ ์ธ๊ณผ๋ฅผ ์ฐพ์๋ณด๋ค ๊ฒฐ๊ตญ ๊ณต๋ณ์ฑ(Covariance) ์ด๋ผ๋ ๋จ์ด๊น์ง ๋๋ฌํ์ ๊ฑฐ๋ผ ์ถ์ธกํ๋ค. ํ์ ์คํฌ๋ฆฝํธ์๋ ์ฉ์ด๋ถํฐ ์ด๋ ค์ ๋ณด์ด๋ ์ด ๋จ์ด ์ด์ธ์๋ 3๊ฐ์ง ๋ ๊ฐ๋ ์ด ์๋๋ฐ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ๊ณต๋ณ์ฑ(Covariance) : A๊ฐ B์ ์๋ธํ์ ์ด๋ฉด, T๋ T์ ์๋ธํ์ ์ด๋ค. ๋ฐ๊ณต๋ณ์ฑ(Contravar..
๐ ํ์ ์คํฌ๋ฆฝํธ ์ปค์คํ Error ์ฒ๋ฆฌํ๊ธฐ
ํ์ ์คํฌ๋ฆฝํธ Error ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด๋ค ๊ฐ์ด๋ ์๋ฌ๋ก ๋์ง์๊ฐ ์๋ค. ๊ทธ๋ฌ๋ try catch ๋ฌธ์์ ํ์ ์คํฌ๋ฆฝํธ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์๋์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋ ๋ณธ์ ์ด ์์ ๊ฒ์ด๋ค. [typescript] Object is of type 'unknown'.ts(2571) (error object) ๊ธฐ์กด์๋ error: any ํ์ ์ด์๊ธฐ ๋๋ฌธ์, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ด ์ฌ์ฉํด๋ ts error๊ฐ ๋ฐ์ํ์ง ์์๋ค. ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ v4.4 ๋ถํฐ๋ error์ object๊ฐ unknown type์ผ๋ก ์ ์ ๋์ด์, ts error๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค. try { // ... } catch (err) { console.error(err.message); // Object is of type 'un..
๐ ํ์ ์คํฌ๋ฆฝํธ ์์ฌ ์์ฑ ๊ฒ์ฌ ์๋ฆฌ ์ดํดํ๊ธฐ
ํ์ ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ํ์ ์ฒดํน ํ์ ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด ํ์ ์ ์ ์ธํ ๋ ์ข ๋ ์๋ฐํ ์์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ Avangers ๋ผ๋ ์ธํฐํ์ด์ค ํ์ ์ด ์๋ค๊ณ ํ์. ์ฌ๊ธฐ์๋ name ํค ์์ฑ ํ๋๋ง ์ ์๋์ด ์๋ค. ์ด ์ธํฐํ์ด์ค๋ฅผ hero ๋ณ์ ํ์ ์ผ๋ก ์ ์ํ๊ณ ๊ฐ์ฒด๊ฐ์ ๋์ ํ์๋ค. ๊ทธ๋ฐ๋ฐ name ํค ์ธ์ location ํค๋ ๊ฐ์ด ๋ฃ์๋๋ ์ค๋ฅ๊ฐ ๋ฌ๋ค. interface Avengers { name: string; } let hero: Avengers; hero = { name: 'Captain', location: 'Pangyo' }; // Error - '{ name: string; location: string; }' ํ์์ 'Avengers' ํ์์ ํ ๋นํ ์ ์์ต๋๋ค. ๊ฐ์ฒด ๋ฆฌ..
๐ ํ์ ์คํฌ๋ฆฝํธ ์ ํธ๋ฆฌํฐ ํ์ ๐ฏ ์ด์ ๋ฆฌ (+์์ฉ)
ํ์ ์คํฌ๋ฆฝํธ - Utility Types ์ง๊ธ๊น์ง ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฃจ๋ฉด์, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋์ ๋ ์๋๊น ํ์ ์ข ๋ฅ๋ง ๋ฐฐ์ฐ๋ฉด ๋๋ฑ ๋ง์คํฐ ํ ์ค ์์๋๋, ํ์ ์์ฒด๋ฅผ ์ฝ๋ฉํ๋ฉฐ ์๋ฌ์ค์ ์ฌ๋ผ์ง๊ฒ ํ๋ ์ด๋ฅธ๋ฐ ํ์ ์ ์ฝ๋ฉ ํ๊ณ ์๋ ์์ ์ ๋ฐ๊ฒฌํ์ ๊ฒ์ด๋ค. ๐คฃ ์ด๋ฌํ ๊ณ ์ถฉ์ ํ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ง๋ค์ด ์์๋์ง, TypeScript๋ ๊ณตํต ํ์ ๋ณํ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ ํธ๋ฆฌํฐ ํ์ ์ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด์ ๋ค๋ฃจ๋๋ฐ ์์ด for , while๋ฌธ ์ด๋ฉด ์ถฉ๋ถํ๊ฒ ์ง๋ง, ๋ฐ๋ก, forEach๋ฌธ ์ด๋ ๋ฐฐ์ด์ ๋ง๋๋ map, ๋ฐฐ์ด์์๋ฅผ ์ฐพ๋ find๋ filter ๊ฐ์, ๋ฐฐ์ด์ ๋ค๋ฃจ๋๋ฐ ํธ๋ฆฌํ๊ฒ ์ด์ฉ๊ฐ๋ฅํ ๋ฃจํ ํฌํผ ํจ์๋ฅผ ์ง์ํ๋ฏ์ด, ํ์ ์คํฌ๋ฆฝํธ์์๋ ํ์ ๋ณ๊ฒฝ์ ์ฝ๊ณ ์ฉ์ดํ๊ฒ ํ๊ธฐ์ํด..
๐ ํ์ ์คํฌ๋ฆฝํธ ์กฐ๊ฑด๋ถ ํ์ ์๋ฒฝ ์ดํดํ๊ธฐ
๊ณ ๊ธ ํ์ - Conditional Types ์กฐ๊ฑด๋ถ ํ์ (conditional type)์ด๋ ์ ๋ ฅ๋ ์ ๋ค๋ฆญ ํ์ ์ ๋ฐ๋ผ ํ์ ์ ๊ฒฐ์ ๊ธฐ๋ฅ์ ๋งํ๋ค. ์์ ๊ฐ์ด ์กฐ๊ฑด๋ถ ํ์ ๋ฌธ๋ฒ์ extends ํค์๋์ ๋ฌผ์ํ ? ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ณด์๋ง์ ์ผํญ ์ฐ์ฐ์๊ฐ ์๊ฐ ๋ฌ์ ๊ฒ์ด๋ค. ์ฌ๋ฌ๋ถ์ด ์ ์ถํ ๋ฐ์ ๊ฐ์ด, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ผํญ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ผ๋ฉด, ํ์ ์คํฌ๋ฆฝํธ์ ์กฐ๊ฑด๋ถ ํ์ ์ ๊ฐ ๋์ ํ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์์ ์กฐ๊ฑด๋ถ ํ์ ์ฝ๋ ๋ฌธ๋ฒ์ ํ์ดํด๋ณด์๋ฉด, ํ์ ์ T๊ฐ U์ ํ ๋น๋ ์ ์์ผ๋ฉด ํ์ ์ X๊ฐ ๋๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ํ์ ์ด Y๊ฐ ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฐฉ๊ฐํ์ง ๋ง์์ผ ํ ์ ์ ์กฐ๊ฑด๋ถ ํ์ ๋ ์ ๋์จ ์ฒ๋ผ ํ๋์ ํ์ ์ด๋ผ๋ ๊ฒ์ด๋ค. extends ํค์๋..
๐ ํ์ ์คํฌ๋ฆฝํธ Mapped types ์๋ฒฝ ์ดํดํ๊ธฐ
ํ์ ์คํฌ๋ฆฝํธ ๋งต๋ ํ์ ํ์ ์คํฌ๋ฆฝํธ์ ๊ณ ๊ธ ํ์ ์ธ ๋งต๋ ํ์ (mapped type)์ด๋ ๊ธฐ์กด์ ์ ์๋์ด ์๋ ํ์ ์ ์๋ก์ด ํ์ ์ผ๋ก ๋ณํํด ์ฃผ๋ ๋ฌธ๋ฒ์ ์๋ฏธ ํ๋ค. ์๋ฅผ ๋ค์ด ์ธํฐํ์ด์ค์ ์๋ ๋ชจ๋ ์์ฑ์ ๋ฃจํ๋ฌธ ๊ฐ์ด ์ํํด์ optional(?) ๋ก ๋ฐ๊พธ๊ฑฐ๋ readonly ๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ, ์์ ์ง์ ๋ ํ์ ์ ๋ฐ๊ฟ์ ๋ณ๊ฒฝ๋ ํ์ ์ ๋ฐํํ ์ ๋ ์๋ค. ์์ง ๋งต๋ ํ์ ์ ๋ํด ๋ฌธ๋ฒ์ ๋ฐฐ์ฐ์ง๋ ์์์ง๋ง ๊ฐ๋จํ๊ฒ ์ดํด๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. interface Obj { prop1: string; prop2: string; } type ChangeType = { [K in keyof T]: number; }; type Result = ChangeType; /* { prop1: number; prop2: nu..
๐ ํ์ ์คํฌ๋ฆฝํธ ๋๋ํ ๋จ์ธ ์ฐ์ฐ์
Non-null assertion operator ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๋๋ถ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋๋ํ(!)๋ ์ฃผ๋ก False๋ฅผ ์๋ฏธํ๋ ์ฐ์ฐ์๋ก ์ฌ์ฉ๋๋ค. ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ์์ ๋ณ์ ์์ด ์๋, ๋ค์ ๋๋ํ(!)๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ฐํ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๋๋ฐ, ํผ์ฐ์ฐ์๊ฐ Nullish(null์ด๋ undefined) ๊ฐ์ด ์๋์ ๋จ์ธํ ์ ์๋ค. ์ด๋ฅผ Null์ด ์๋ ๋จ์ธ ์ฐ์ฐ์(Non-null assertion operator) ๋๋ ํ์ ํ ๋น ์ด์ ์ (Definite Assignment Assertions) ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. Null์ด ์๋ ์ด์ ์ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๊ฐ null์ด ์๋๋ผ๊ณ ์ปดํ์ผ๋ฌ์๊ฒ ์ ๋ฌํ์ฌ ์ผ์์ ์ผ๋ก Null ์ ์ฝ์กฐ๊ฑด์ ์ํ์ํจ๋ค. ๋น์ต ๋ฌด์จ๋ง์ธ์ง ๋ชจ๋ฅผ๊ฒ์ด๋ค. ๐ช ์ดํด๋ฅผ ๋๊ธฐ์ํด ๋ค..
๐ ๊ฐ์ฒด๋ฅผ ํ์ ์ผ๋ก ๋ณํ - keyof / typeof ์ฌ์ฉ๋ฒ
ํ์ ์คํฌ๋ฆฝํธ - keyof / typeof typeof ์ฐ์ฐ์ typeof : ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด ํ์ ์ผ๋ก ๋ณํํด์ฃผ๋ ์ฐ์ฐ์ ์๋์ ์ฝ๋์ obj๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์, ๋น์ฐํ ๊ฐ์ฒด ์์ฒด๋ฅผ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ ๋ง์ผ ๊ฐ์ฒด์ ์ฐ์ธ ํ์ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ ๋ ๋ฆฝ๋ ํ์ ์ผ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ์์ typeof ํค์๋๋ฅผ ๋ช ์ํด์ฃผ๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋ค. const obj = { red: 'apple', yellow: 'banana', green: 'cucumber', }; // ์์ ๊ฐ์ฒด๋ฅผ ํ์ ์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ๊ณ ์ถ์๋ type Fruit = typeof obj; /* type Fruit = { red: string; yellow: string; gree..
๐ ํ์ ์คํฌ๋ฆฝํธ Generic ํ์ ์ ๋ณตํ๊ธฐ
์ ๋ค๋ฆญ(Generics) ์๊ฐ ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ '๋ณ์' ๋ผ๋ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฐ์ฑ์ ์ํด์์ด๋ค. ๋ณ์ ๋ผ๋ ๋จ์ด๋ ๋ณํ ์ ์๋ ๊ฒ์ ๋งํ๊ณ ๊ทธ๋ฐ๋์ธ ์์๋ ํญ์ ๊ณ ์ ๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ฌํ ๊ฐ๋ ์ผ๋ก ๋ดค์๋ ์ฐ๋ฆฌ๊ฐ ์ด๋๊น์ง number[] ๋ฉฐ string ์ด๋ฉฐ ์ฌ์ฉํ๋ ํ์ ์ ํญ์ ๊ณ ์ ๋์ด ์ ๋ ๋ณํ์ง ์๋ ํ์ ์ ์ฌ์ฉํด์ค๊ณ ์์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ฝ๊ฐ์ ์ ์ฐ์ฑ์ ๊ฐ๋ฏธํ๊ฒ number | string | undefiened ์ ๋์จ ํ์ ์ด๋ค. ํ์ง๋ง ์ด ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์๋ ์ํฉ์ด ํญ์ ๊ณ ์ ๋์ด ์๋๋๋ก ํ๋ฌ๊ฐ์ง๋ ์๋๋ค. ์ธ์ ์ด๋์ ๋ณํ ์ ์๋ ๋ณ์๊ฐ ํญ์ ์ผ์ด๋๋๊ฒ ์ด ์ ๊ณ์ด๋ค. ๋ฐ๋ผ์ ํ์ ์ ์ง์ ์ ์ผ๋ก ๊ณ ์ ๋ ๊ฐ์ผ๋ก ๋ช ์ํ์ง๋ง๊ณ '๋ณ์' ๋ฅผ ํตํด ์ธ์ ๋ ์ง ๋ณํ ..