Frontend ๊ฐœ๋ฐœ์ž - hyo.loui

Project: Develife - โœจTypescript ๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ • ๋ณธ๋ฌธ

Project

Project: Develife - โœจTypescript ๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ •

hyo.loui 2023. 1. 28. 01:46

๐ŸŽฏ๋ชฉ์  :

ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ ๋ฆฌํŽ™ํ† ๋ง ๊ณผ์ • ์ •๋ฆฌ

 

๐Ÿคข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… :

  • Comment ํƒ€์ž… overlap ์—๋Ÿฌ

1. typescript ํ™˜๊ฒฝ ์„ธํŒ…

 

Develife ํ”„๋กœ์ ํŠธ๋Š” ๋ฆฌ์•กํŠธ๋กœ ๋‹ค ์ž‘์„ฑ๋˜์–ด ๋ฐฐํฌ๊นŒ์ง€

๋งˆ์นœ ์ƒํƒœ์˜€๋‹ค.

 

์ฒ˜์Œ ์ง„ํ–‰ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์€

typescript์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค

 

npm install typescript @types/node @types/react @types/react-dom @types/jest

 

dependenci์— ์„ค์น˜๊ฐ€ ์™„๋ฃŒ ๋œ ํ›„,

tsc --init

 

๋ช…๋ น์–ด๋กœ tsconfig.json ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„,

 

jsx๋ฅผ ์ธ์‹ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด

์ฃผ์„์ฒ˜๋ฆฌ ๋˜์–ด์žˆ๋Š” 16๋ฒˆ์งธ ๋ผ์ธ์˜

์ฃผ์„์„ ํ•ด์ œํ•˜๋ฉฐ, "JSX": "preserve",  >> "JSX": "react" ๋กœ ๋ฐ”๊พผ๋‹ค

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ 

Root๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ดˆ๊ธฐ ๋ฆฌํŽ™ํ† ๋ง ํ™˜๊ฒฝ ์„ธํŒ…์€ ๋์ด ๋‚œ๋‹ค

ํ•ญ์ƒ HTML์˜ div element๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๊ณ  ๋ช…์‹œํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋‹ค.

 


2. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

 

์„œ๋ฒ„ ์Šคํ…Œ์ดํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ด์„œ

์กฐ์›์ด ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค.

 

์•„์ง ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์ด๋‚˜ ์ˆ™๋ จ๋„๊ฐ€ ๋ถ€์กฑํ•ด ์ด๊ฒŒ ๋งž๋Š”๊ฑด๊ฐ€(?)

ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.

 

์œ„ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ๊ณ ,

์–ด์ฐจํ”ผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ import ํ•ด์•ผ ํ•˜๋ฏ€๋กœ,

index.data.ts๋ผ๋Š” ํŒŒ์ผ์— ์œ„ 3๊ฐœ์˜ interface๋ฅผ ๋ถ„๋ฆฌํ•ด ์ฃผ์—ˆ๋‹ค.

 


3. ์œ ํŠœ๋ธŒ ์ฝ˜ํ…ํŠธ (ํ•œ ์˜์ƒ์˜ ์ธ๋„ค์ผ) ์ปดํฌ๋„ŒํŠธ

 

 

์ฒ˜์Œ ๋ฆฌ์•กํŠธ์—์„œ typescript๋กœ ์ž‘์—…ํ•  ๋•Œ ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋˜

props type๊ณผ event type์ด ์žˆ์—ˆ๋‹ค

 

props type์€ ์œ„์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ค‘ item์— ๋งž๋Š” `ํ•˜๋‚˜์˜ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ`๋ฅผ

์ž„ํฌํŠธํ•ด์„œ ์—ฐ๊ฒฐํ•˜๊ณ , ํ•จ์ˆ˜๋Š” return ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ void type์„ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

 


4. ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ›์•„์˜จ props type

 

์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋Š”

 

  • YoutubeBoard
    • Training
    • Programing
    • ItItem

์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง€๋Š”๋ฐ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์€ category ๋ผ๋Š” state์—์„œ

์ปดํฌ๋„ŒํŠธ์™€ ์ผ์น˜ํ•˜๋Š” string์ด๋ผ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ return ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค

 

๊ทธ๋ž˜์„œ ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ›๊ณ ์žˆ๋Š” props ๋‚ด์šฉ์€

~PlayList๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์ผ์น˜ํ•˜๋‹ค


+ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ :

before - ํ•ด๊ฒฐ ์ „

๋ถ„๋ช… Comment๋ผ๋Š” ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ

์ธ์‹์ด ์•ˆ๋˜์—ˆ๋‹ค..

 

์™œ ์•ˆ๋ ๊นŒ typescript์˜ ์—„์ฒญ๋‚œ ๊ฟ€ํŒ์€

  • ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋ณธ๋‹ค
  • Ctrl + ๋งˆ์šฐ์Šค ํด๋ฆญ

์œผ๋กœ ์–ด๋–ค ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค

 

๊ทธ๋ ‡๊ฒŒ ์ฐพ์•„๋‚ธ ๊ฒฐ๋ก ์€, 

์ด๋ฏธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋†“์€ declare๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์—ˆ๋‹ค!!...

 

๊ทธ๋ž˜์„œ interface ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์ฃผ๊ณ ,

์—ฐ๊ฒฐ๋œ ์ปดํฌ๋„ŒํŠธ์˜ import ๊ตฌ๋ฌธ๋„ ๋‹ค์‹œ ํ™•์ธํ–ˆ๋‹ค

 

 

after - ํ•ด๊ฒฐ ํ›„

 

+ ํ•ด๊ฒฐ :

typescript ๊ธฐ์กด์— ์žˆ๋Š” declare ์ด๋ฆ„๊ณผ ๊ฒน์น˜๋Š” ๋ฌธ์ œ๋กœ,
์ƒ์„ฑํ•œ interface๊ฐ€ ์ œ๋Œ€๋กœ ์ธ์‹๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

๋‹ค๋ฅธ interface ์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๋ฉฐ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ

 

 


 

 ์ตœ์ข… ์ •๋ฆฌ 

  1. js >> ts ๋ฆฌํŽ™ํ† ๋ง ์‹œ typescript์˜ ํŒจํ‚ค์ง€ ์„ค์น˜, tsc --init
  2. root ์— as HTMLDivElement ๊ตฌ๋ฌธ ์ถ”๊ฐ€
  3. tsconfig.json ํŒŒ์ผ 16๋ฒˆ์งธ์ค„ ์ฃผ์„ ํ•ด์ œ ํ›„  "JSX": "preserve",  >> "JSX": "react"
  4. ํ•จ์ˆ˜์— return ๊ฐ’์ด ์—†๋Š”๊ฒฝ์šฐ void type์„ ์ง€์ •, prameter์—๋„ type ์ง€์ • ex) function(pram: type) {...}
  5. import ๊ฐ€ ๋งŽ์€ interface ๊ฒฝ์šฐ ๋”ฐ๋กœ ํŒŒ์ผ ๋ถ„๋ฆฌ!
  6. typescript์˜ ์ฐธ์กฐ๊ฐ’์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋ณด๊ฑฐ๋‚˜, Ctrl + ํด๋ฆญํ•ด๋ณด์ž