์ธํŒŒ

You Can Become A

Pro

๋Šฆ๊ฒŒ ์‹œ์ž‘ํ•ด๋„ ๋ˆ„๊ตฌ๋“ ์ง€ ๋…ธ๋ ฅํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ์ˆ˜ ์žˆ์–ด์š” !

TypeScript

๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ œ๋„ค๋ฆญ ํƒ€์ž… ํ•จ์ˆ˜ ๋ถ„์„ & ๋งŒ๋“ค๊ธฐ

์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š” forEach() ๋‚˜ map() ๊ฐ™์€ ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋‹น์—ฐํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„  ๊ฐ ์ธ์ˆ˜ ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ๋Œ์•„๊ฐ€๋Š”๋ฐ, ๊ธฐ์กด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”์†Œ๋“œ์— ์–ด๋–ป๊ฒŒ ํƒ€์ž…์„ ์„ค์ •ํ•˜์˜€๊ธฐ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๊ณ ์ฐจํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ? ์‹ค์ œ๋กœ ์ œ๋„ค๋ฆญ์œผ๋กœ ํƒ€์ž…์ด ์ง€์ •์ด ๋˜์žˆ์–ด์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋ฌด๋ฆฌ์—†์ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ์‹ค์ œ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ์„ค์ •๋˜์–ด์žˆ๋Š” ๊ธฐ์กด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ ์ฐจํ•จ์ˆ˜๊ฐ€ ์ œ๋„ค๋ฆญ์œผ๋กœ ์–ด๋–ค์‹์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„์„ํ•˜๋ฉด์„œ ํ™•์‹คํžˆ ์ œ๋„ค๋ฆญ์„ ์ดํ•ดํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž. ์‹ค์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ถ„์„ํ•˜๊ธฐ forEach ํƒ€์ž… ๋ถ„์„ํ•˜๊ธฐ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” forEach ์˜ ์ œ๋„ค๋ฆญ์„ ๋ถ„์„ํ•ด๋ณด์ž. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํƒ€์ž…..

category_image
์ธํŒŒ_
2022.10.22
2
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ & ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์‹œ์Šคํ…œ ์ดํ•ดํ•˜๊ธฐ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋ชจ๋“ˆ์€ ๋…๋ฆฝ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์˜ ๋‹จ์œ„์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ๋ชจ๋“ˆ์„ ๊ฒฐํ•ฉํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹ค. ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค. ์œ ์ง€ ๋ณด์ˆ˜์˜ ์šฉ์ด์„ฑ : ์ค‘๋ณต ์ฝ”๋“œ์˜ ์ตœ์†Œํ™” ์ „์—ญ ์Šค์ฝ”ํ”„ ์˜ค์—ผ์„ ๋ฐฉ์ง€ : ์ด๋ฆ„ ๊ณต๊ฐ„์ด ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ œํ•œ๋˜์–ด ์ „์—ญ ์ด๋ฆ„ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜์ง€ ์•Š์Œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ : ๋ชจ๋“ˆ์„ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๊ณต์œ ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ด์ฒ˜๋Ÿผ ๋ชจ๋“ˆ์€ ์ „์—ญ ๋ณ€์ˆ˜์™€ ๊ตฌ๋ถ„๋˜๋Š” ํŒŒ์ผ ์ž์ฒด ์œ ํšจ ๋ฒ”์œ„(Local Scope)๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ๋ชจ๋“ˆ ๋‚ด ์„ ์–ธ๋œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‚ด๋ณด๋‚ด์ง€ ์•Š๋Š” ์ด์ƒ ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด index.ts , test/test.ts ๋‘ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ..

category_image
์ธํŒŒ_
2022.10.06
2
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ @๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ฐœ๋… & ์‚ฌ์šฉ๋ฒ•

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ Decorator ๋ž€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ Angular.js ๋‚˜ Nest.js ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ํ•„์—ฐ์ ์œผ๋กœ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ž€ ๊ฒƒ์„ ์ ‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ž๋ฐ”(Java)๋ฅผ ํ•ด๋ณธ ๋ถ„๋“ค์ด๋ผ๋ฉด ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ์ง€๋งŒ, ์ž๋ฐ” ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ƒ๊ด€์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์—๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š์•„, ์˜คํžˆ๋ ค ํŒŒ์ด์ฌ(Python)์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋งํ•˜๋Š”๊ฒŒ ์˜ณ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์ผ์ข…์˜ ํ•จ์ˆ˜ ์ด๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์žฅ์‹ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ”์†Œ๋“œ / ํด๋ž˜์Šค / ํ”„๋กœํผํ‹ฐ / ํŒŒ๋ผ๋ฏธํ„ฐ ์œ„์— @ํ•จ์ˆ˜ ๋ฅผ ์žฅ์‹ํ•ด์คŒ์œผ๋กœ์จ, ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰(๋Ÿฐํƒ€์ž„)์ด ๋˜๋ฉด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด, ์žฅ์‹ํ•œ ๋ฉค๋ฒ„๋ฅผ ๋ณด๋‹ค ํŒŒ์›Œํ’€ํ•˜๊ฒŒ ..

category_image
์ธํŒŒ_
2022.09.30
3
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต๋ณ€์„ฑ & ๋ฐ˜๊ณต๋ณ€์„ฑ ์™„๋ฒฝ ์ดํ•ด

ํƒ€์ž…์˜ ๊ณต๋ณ€์„ฑ๊ณผ ๋ฐ˜๊ณต๋ณ€์„ฑ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•ด์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์ง€๋งŒ, ํƒ€์ž…์„ ๋‹ค๋ฃจ๋Š” ์–ธ์–ด์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋Š์ƒˆ ํƒ€์ž… ์ž์ฒด๋ฅผ ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํƒ€์ž…์„ ์ฝ”๋”ฉํ•˜๋Š” ๋„์ค‘ ๋งŽ์ด ๋‹นํ™ฉํ•˜๋Š” ๊ฐœ๋…์ด ํƒ€์ž… ๊ฐ„์˜ ๊ด€๊ณ„ ์ด๋‹ค. ์–ด๋–ค ํƒ€์ž…์€ ๋‹ค๋ฅธ ํƒ€์ž…์— ๋“ค์–ด๊ฐ€๋Š”๋ฐ ์–ด๋–ค ํƒ€์ž…์€ ์•ˆ ๋“ค์–ด๊ฐ€์„œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ๋‹นํ™ฉ์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์ด๋Ÿฐ ์ด์ƒํ•œ ์ธ๊ณผ๋ฅผ ์ฐพ์•„๋ณด๋‹ค ๊ฒฐ๊ตญ ๊ณต๋ณ€์„ฑ(Covariance) ์ด๋ผ๋Š” ๋‹จ์–ด๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์„ ๊ฑฐ๋ผ ์ถ”์ธกํ•œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๋Š” ์šฉ์–ด๋ถ€ํ„ฐ ์–ด๋ ค์›Œ ๋ณด์ด๋Š” ์ด ๋‹จ์–ด ์ด์™ธ์—๋„ 3๊ฐ€์ง€ ๋” ๊ฐœ๋…์ด ์žˆ๋Š”๋ฐ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๊ณต๋ณ€์„ฑ(Covariance) : A๊ฐ€ B์˜ ์„œ๋ธŒํƒ€์ž…์ด๋ฉด, T๋Š” T์˜ ์„œ๋ธŒํƒ€์ž…์ด๋‹ค. ๋ฐ˜๊ณต๋ณ€์„ฑ(Contravar..

category_image
์ธํŒŒ_
2022.09.29
3
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปค์Šคํ…€ 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..

category_image
์ธํŒŒ_
2022.09.28
2
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž‰์—ฌ ์†์„ฑ ๊ฒ€์‚ฌ ์›๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํƒ€์ž… ์ฒดํ‚น ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด ํƒ€์ž…์„ ์„ ์–ธํ•  ๋•Œ ์ข€ ๋” ์—„๋ฐ€ํ•œ ์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ Avangers ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์—ฌ๊ธฐ์—๋Š” name ํ‚ค ์†์„ฑ ํ•˜๋‚˜๋งŒ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ hero ๋ณ€์ˆ˜ ํƒ€์ž…์œผ๋กœ ์ •์˜ํ•˜๊ณ  ๊ฐ์ฒด๊ฐ’์„ ๋Œ€์ž…ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ name ํ‚ค ์™ธ์— location ํ‚ค๋„ ๊ฐ™์ด ๋„ฃ์—ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค. interface Avengers { name: string; } let hero: Avengers; hero = { name: 'Captain', location: 'Pangyo' }; // Error - '{ name: string; location: string; }' ํ˜•์‹์€ 'Avengers' ํ˜•์‹์— ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด ๋ฆฌ..

category_image
์ธํŒŒ_
2022.09.20
(0)
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž… ๐Ÿ’ฏ ์ด์ •๋ฆฌ (+์‘์šฉ)

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ - Utility Types ์ง€๊ธˆ๊นŒ์ง€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ด๋Š์ •๋„ ์•„๋‹ˆ๊นŒ ํƒ€์ž… ์ข…๋ฅ˜๋งŒ ๋ฐฐ์šฐ๋ฉด ๋š๋”ฑ ๋งˆ์Šคํ„ฐ ํ•  ์ค„ ์•Œ์•˜๋”๋‹ˆ, ํƒ€์ž… ์ž์ฒด๋ฅผ ์ฝ”๋”ฉํ•˜๋ฉฐ ์—๋Ÿฌ์ค„์„ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๋Š” ์ด๋ฅธ๋ฐ” ํƒ€์ž…์„ ์ฝ”๋”ฉ ํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ๐Ÿคฃ ์ด๋Ÿฌํ•œ ๊ณ ์ถฉ์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ง„๋“ค์ด ์•Œ์•˜๋Š”์ง€, TypeScript๋Š” ๊ณตํ†ต ํƒ€์ž… ๋ณ€ํ™˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž…์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š”๋ฐ ์žˆ์–ด for , while๋ฌธ ์ด๋ฉด ์ถฉ๋ถ„ํ•˜๊ฒ ์ง€๋งŒ, ๋”ฐ๋กœ, forEach๋ฌธ ์ด๋‚˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” map, ๋ฐฐ์—ด์š”์†Œ๋ฅผ ์ฐพ๋Š” find๋‚˜ filter ๊ฐ™์€, ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š”๋ฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉ๊ฐ€๋Šฅํ•œ ๋ฃจํ”„ ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋“ฏ์ด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ํƒ€์ž… ๋ณ€๊ฒฝ์„ ์‰ฝ๊ณ  ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด..

category_image
์ธํŒŒ_
2022.09.20
(0)
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์กฐ๊ฑด๋ถ€ ํƒ€์ž… ์™„๋ฒฝ ์ดํ•ดํ•˜๊ธฐ

๊ณ ๊ธ‰ ํƒ€์ž… - Conditional Types ์กฐ๊ฑด๋ถ€ ํƒ€์ž…(conditional type)์ด๋ž€ ์ž…๋ ฅ๋œ ์ œ๋„ค๋ฆญ ํƒ€์ž…์— ๋”ฐ๋ผ ํƒ€์ž…์„ ๊ฒฐ์ • ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ์œ„์™€ ๊ฐ™์ด ์กฐ๊ฑด๋ถ€ ํƒ€์ž… ๋ฌธ๋ฒ•์€ extends ํ‚ค์›Œ๋“œ์™€ ๋ฌผ์Œํ‘œ ? ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ณด์ž๋งˆ์ž ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ์ƒ๊ฐ ๋‚ฌ์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ์œ ์ถ”ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์กฐ๊ฑด๋ถ€ ํƒ€์ž…์€ ๊ฐ’ ๋Œ€์‹  ํƒ€์ž…์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์œ„์˜ ์กฐ๊ฑด๋ถ€ ํƒ€์ž… ์ฝ”๋“œ ๋ฌธ๋ฒ•์„ ํ’€์ดํ•ด๋ณด์ž๋ฉด, ํƒ€์ž…์€ T๊ฐ€ U์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ์œผ๋ฉด ํƒ€์ž…์€ X๊ฐ€ ๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ํƒ€์ž…์ด Y๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฐฉ๊ฐํ•˜์ง€ ๋ง์•„์•ผ ํ• ์ ์€ ์กฐ๊ฑด๋ถ€ ํƒ€์ž…๋„ ์œ ๋‹ˆ์˜จ ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. extends ํ‚ค์›Œ๋“œ..

category_image
์ธํŒŒ_
2022.09.19
6
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ 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..

category_image
์ธํŒŒ_
2022.09.16
2
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋Š๋‚Œํ‘œ ๋‹จ์–ธ ์—ฐ์‚ฐ์ž

Non-null assertion operator ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋Š๋‚Œํ‘œ(!)๋Š” ์ฃผ๋กœ False๋ฅผ ์˜๋ฏธํ•˜๋Š” ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜ ์•ž์ด ์•„๋‹Œ, ๋’ค์— ๋Š๋‚Œํ‘œ(!)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ฐœํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ Nullish(null์ด๋‚˜ undefined) ๊ฐ’์ด ์•„๋‹˜์„ ๋‹จ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ Null์ด ์•„๋‹Œ ๋‹จ์–ธ ์—ฐ์‚ฐ์ž(Non-null assertion operator) ๋˜๋Š” ํ™•์ • ํ• ๋‹น ์–ด์„ ์…œ(Definite Assignment Assertions) ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. Null์ด ์•„๋‹Œ ์–ด์„ ์…œ ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null์ด ์•„๋‹ˆ๋ผ๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ Null ์ œ์•ฝ์กฐ๊ฑด์„ ์™„ํ™”์‹œํ‚จ๋‹ค. ๋‹น์ตœ ๋ฌด์Šจ๋ง์ธ์ง€ ๋ชจ๋ฅผ๊ฒƒ์ด๋‹ค. ๐Ÿ˜ช ์ดํ•ด๋ฅผ ๋•๊ธฐ์œ„ํ•ด ๋‹ค..

category_image
์ธํŒŒ_
2022.09.11
(0)
TypeScript

๐Ÿ“˜ ๊ฐ์ฒด๋ฅผ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ - 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..

category_image
์ธํŒŒ_
2022.09.10
2
TypeScript

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ Generic ํƒ€์ž… ์ •๋ณตํ•˜๊ธฐ

์ œ๋„ค๋ฆญ(Generics) ์†Œ๊ฐœ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ• ๋•Œ '๋ณ€์ˆ˜' ๋ผ๋Š” ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ์œ ์—ฐ์„ฑ์„ ์œ„ํ•ด์„œ์ด๋‹ค. ๋ณ€์ˆ˜ ๋ผ๋Š” ๋‹จ์–ด๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•˜๊ณ  ๊ทธ๋ฐ˜๋Œ€์ธ ์ƒ์ˆ˜๋Š” ํ•ญ์ƒ ๊ณ ์ •๋œ ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ๋…์œผ๋กœ ๋ดค์„๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ด๋•Œ๊นŒ์ง€ number[] ๋ฉฐ string ์ด๋ฉฐ ์‚ฌ์šฉํ–ˆ๋˜ ํƒ€์ž…์€ ํ•ญ์ƒ ๊ณ ์ •๋˜์–ด ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์˜ค๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ์•ฝ๊ฐ„์˜ ์œ ์—ฐ์„ฑ์„ ๊ฐ€๋ฏธํ•œ๊ฒŒ number | string | undefiened ์œ ๋‹ˆ์˜จ ํƒ€์ž…์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒํ™ฉ์ด ํ•ญ์ƒ ๊ณ ์ •๋˜์–ด ์˜๋„๋Œ€๋กœ ํ˜๋Ÿฌ๊ฐ€์ง€๋Š” ์•Š๋Š”๋‹ค. ์–ธ์ œ ์–ด๋””์„œ ๋ณ€ํ• ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๊ฒŒ ์ด ์—…๊ณ„์ด๋‹ค. ๋”ฐ๋ผ์„œ ํƒ€์ž…์„ ์ง์ ‘์ ์œผ๋กœ ๊ณ ์ •๋œ ๊ฐ’์œผ๋กœ ๋ช…์‹œํ•˜์ง€๋ง๊ณ  '๋ณ€์ˆ˜' ๋ฅผ ํ†ตํ•ด ์–ธ์ œ๋“ ์ง€ ๋ณ€ํ• ..

category_image
์ธํŒŒ_
2022.09.09
4