[React 09] - Typescript

yiwoojungยท2022๋…„ 7์›” 7์ผ
0

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
9/21

๐Ÿ—ฟ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. ๋” ์•ˆ์ „ํ•œ Typescript
  2. ๊ธฐ์กด์˜ Javasript์— Typescript ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.


์‹ค์ œ ์‹ค๋ฌด์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.Typescript๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ์–ด๋””์„œ ํŠ€์–ด๋‚˜์˜ฌ์ง€ ๋ชจ๋ฅด๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋Š์ •๋„ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๋‹จ์ˆœํžˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์ œ ์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.



1. ๋” ์•ˆ์ „ํ•œ Typescript


Typescript๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž…์„ ๊ฐ•์ œ์‹œํ‚ค๋Š” ์–ธ์–ด์ด๋‹ค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์€ ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ”๋˜ ์ƒ์ž๋ผ๋ฉด ๋‹ค๋ฅธ ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๊ฒƒ์„ ์ œ์–ดํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ผ๊นŒ?

ํฐ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค๋ฉด ์ˆ˜๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ• ํ…๋ฐ ์—๋Ÿฌ๋“ค์ด ๊ณ„์† ๋‚˜์˜ฌํ…๋ฐ ์ด๋ฅผ ์•ˆ์ •์ ์ด๊ฒŒ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ vscode ์ž์ฒด์—์„œ ๋ง‰์•„์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ• ๊ฒŒ ๋งŽ์ง€๋งŒ ๊ทธ๋ž˜๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํ•„์ˆ˜๋‹ค.
์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์—†์–ด์ง€๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.



ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ• ๊นŒ?

์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜๋“ค์„ ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ฐ์ฒด๋Š” Interface๋ผ๊ณ  ํ•ด์„œ ๊ฐ์ฒด ํƒ€์ž…์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ค€๋‹ค. ์ด ํƒ€์ž…์˜ ์ด๋ฆ„์€ ์ง“๊ธฐ ๋‚˜๋ฆ„์ด์ง€๋งŒ ๊ด€๋ก€์ƒ Interface์˜ I์™€ ๋ณ€์ˆ˜๋ช…์„ ํ•ฉ์ณ์„œ ์‚ฌ์šฉํ•œ๋‹ค.


2. ๊ธฐ์กด์˜ Javasript์— Typescript ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

์šฐ์„  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค˜์•ผํ•œ๋‹ค.

[1] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜ํ•˜๊ธฐ

https://www.typescriptlang.org/download

yarn add typescript --dev

--dev๋กœ ์„ค์น˜ํ•˜๋ฉด devDependencies๋กœ vscode์—์„œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์šฉ๋„๋กœ ์„ค์น˜ํ•จ

[2] ์„ค์ •ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

tsconfig.json ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
์•ˆ์— ๋‚ด์šฉ๋“ค์„ ๋„ฃ์–ด์ค‘์–ด์•ผ ํ•˜์ง€๋งŒ next.js๋ฅผ ์“ฐ๋ฉด yarn dev๋งŒ ํ•ด๋„ ์ด ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์„ธํŒ…๋œ๋‹ค.

1. yarn dev
2. yarn add --dev @types/node


yarn dev๋ฅผ ํ•˜๋ฉด ์ €๋Ÿฐ ํ™”๋ฉด์ด ๋œฐ ๊ฒƒ์ด๋‹ค.
ํŒŒ๋ž€ ๊ธ€์”จ๋ฅผ ๋ณต๋ถ™ ํ•˜์ž.

https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#handbook-content
next.js ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์œ„ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

๋‹ค์Œ์ฒ˜๋Ÿผ tsconfig.json ์ด ์ฑ„์›Œ์ง€๋ฉด ์„ฑ๊ณต์ด๋‹ค!

๋‚ด tsconfig.json ํŒŒ์ผ์ด๋‹ค.

"skipLibCheck" - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํƒ€์ž…์€ ๋„˜๊ธธ ๊ฒƒ์ธ๊ฐ€ 
"strict": true - ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€
"include" - ์–ด๋–ค ํŒŒ์ผ์„ ํฌํ•จํ•  ๊ฒƒ์ธ๊ฐ€

์ด์ œ ํŒŒ์ผ ํ™•์žฅ์ž๋ช…์„ ts, tsx๋กœ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฒ€์ฆํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ x๋Š” eXtensible Markup Language ํ™•์žฅ๊ฐ€๋Šฅํ•œ ๋งˆํฌ์—… ๋žญ๊ท€์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” XML์˜ x๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” HTML์ด๋ž‘ ๋˜‘๊ฐ™์ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋‹ค. ์˜›๋‚ ์—๋Š” XMLํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณค ํ–ˆ๋‹ค.

์ด XML์ด ์žˆ๋Š” ํŒŒ์ผ์„ tsx, ์—†๋Š” ํŒŒ์ผ์„ ts๋กœ ๊ณ ์น˜๋ฉด ๋œ๋‹ค.


ํƒ€์ž… ์ถ”๋ก 

์•„๋ž˜์ฒ˜๋Ÿผ ํ™•์žฅ์ž ๋ช…๋งŒ ๋ฐ”๊ฟ”๋„ tsconfig.json์—์„œ ์ด ํŒŒ์ผ์„ ์ฝ๊ณ  ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์„œ ์—๋Ÿฌ๋ฅผ ์ž๋™์œผ๋กœ ๋„์›Œ์ค€๋‹ค.



ํƒ€์ž… ๋ช…์‹œ

์ง์ ‘ ํƒ€์ž…์„ ๋ช…์‹œ ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

  • number[] - ์ˆซ์ž๋“ค์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฐฐ์—ด

  • (number | string)[] - ์ˆซ์ž๋‚˜ ๋ฌธ์ž๋“ค์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฐฐ์—ด

  • |, & - ํƒ€์ž…์ŠคํŠธ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋˜๋Š” ๊ณผ ๊ทธ๋ฆฌ๊ณ 

  • ? : ์žˆ์–ด๋„ ๋˜๊ณ  ์—†์–ด๋„ ๋œ๋‹ค

    • ?๊ฐ€ ์—†์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ๋Š” ๋ฐ›๋Š” ์ชฝ์—์„œ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•œ๋‹ค.

    • return ๊ฐ’์˜ ํƒ€์ž…์€ ๋งˆ์ง€๋ง‰์— ์ ์–ด์ค€๋‹ค.
  • ํ•จ์ˆ˜ ์ž์ฒด์˜ ํƒ€์ž…์€ () => void ์ด๊ณ , return ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉด void ์จ์ฃผ๋ฉด ๋œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…๋„ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค.

    • ex) onChange - ChangeEvent<HTMLInputElement>
  • ํƒ€์ž…๊ณผ ์‹ค์ œ ํƒœ๊ทธ์˜ ์ข…๋ฅ˜๋ฅผ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.

  • ์Šคํƒ€์ผ์— ํƒ€์ž…์ฃผ๊ธฐ


  • ๊ฐ์ฒด์— ํƒ€์ž…์ฃผ๊ธฐ

    • ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์žˆ์œผ๋ฉด ๋˜๋ฏ€๋กœ ๋ฌผ์Œํ‘œ๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

  • Props ํƒ€์ž…์ฃผ๊ธฐ
    • container์—์„œ ์“ฐ์ด๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ด์•ผํ•œ๋‹ค.

  • ํฌํ•จ ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ค๊ธฐ (ํƒ€์ž… ์ถ”๋ก ์ด ์•ˆ๋  ๋•Œ)
    if(event.target instanceof Element) ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ
    ๋งŒ์•ฝ์— event.target์ด ํ•ด๋‹นํ•˜๋Š” ํƒœ๊ทธ์˜ ์ž์‹์ด๋ผ๋ฉด


_app.js์— Typescript ์ ์šฉํ•˜๊ธฐ



(+) ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ž์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค€๋‹ค.



profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€