[React.ts] React๋ฅผ Typescript๋ก ์์ํด๋ณด๊ธฐ - ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ
์๋ ํ์ธ์. Typescript๋ก ์์ํ๋ ์ฒซ ๊ธ์ ๋๋ค.
Typescript์ ์ฒซ ์์์ React ํ๋ก์ ํธ๋ก ์์ํ๊ฒ ๋์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ ๊ฐ ์ด๋ฒ์ ๋ฉ์ธ ํํ์ด์ง๋ฅผ ๋ค์ ๋ฆฌ๋ด์ผ ํ๊ฒ ๋๋ฉด์ ์ง๋ 2๋ ๋์ ์ฌ์ฉํ์ง ์์๋ React๋ฅผ ๋ค์ ์์ํ๊ฒ ๋์๋๋ฐ์. ๋น๋ก ๋ง๋๋ ์ ๊น ๋์์ด์์ง๋ง ๋ฐฐ์๊ณผ ๊ฐ์ด ๋๋ถ์ด ์งํํ๊ฒ ๋์๊ธฐ ๋๋ฌธ์ React์ ๋ณ๊ฒฝ์ ๋ ๊ฐ์ด ์ดํด๋ด๊ณผ ๋๋ถ์ด์ ์ด๋ฒ์๋ Typescript๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๊ฒ ๋์์ต๋๋ค.
Create react app
React๋ฅผ ๋น ๋ฅด๊ฒ ์์ํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก create-react-app์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. Typescript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ์ญ์ ์ด ๋ช ๋ น์ด๋ก ์ฝ๊ณ ํ ๋ฒ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
$ create-react-app [app-name] --template typescript
์ผ๋ฐ์ ์ผ๋ก create-react-app์ ์ํํ๊ฒ ๋๋ฉด Javascript๋ฅผ Base๋ก ์์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ --typescript ์ต์ ์ ์ถ๊ฐํ์ฌ Typescript๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค.
Javascript๋ ์ด๋ค ๋ถ๋ถ์ด ๋ค๋ฅธ์ง ๊ฐ๋จํ ์ดํด๋ณด๋๋ก ํ์ฃ .
Typescript React
React๋ฅผ Typescript๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Typescript ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๋, Javascript์ ๊ธฐ๋ณธ React ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์์ Typescript configuration ํ์ผ์ด ํ ๊ฐ ๋ ์ถ๊ฐ๋์ด ๊ตฌ์ฑ๋๊ณ , package.json์๋ Typescript๋ก ์ ์๋ ํจํค์ง๋ @types๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ํจํค์ง๋ฅผ ์ค์นํ๊ฒ ๋ฉ๋๋ค.
.
โโโ node_modules
โโโ package.json
โโโ public
โ โโโ favicon.ico
โ โโโ index.html
โ โโโ logo192.png
โ โโโ logo512.png
โ โโโ manifest.json
โ โโโ robots.txt
โโโ README.md
โโโ src
โ โโโ App.css
โ โโโ App.test.tsx
โ โโโ App.tsx
โ โโโ index.css
โ โโโ index.tsx
โ โโโ logo.svg
โ โโโ react-app-env.d.ts
โ โโโ serviceWorker.ts
โโโ tsconfig.json
โโโ yarn.lock
Typescript ํ๊ฒฝ์์ ์กด์ฌํ๋ tsconfig.json์ Typescript ์ธ์ด์ ํ๊ฒฝ ์ค์ ํ์ผ์ ๋๋ค. Typescript์ ๋น๋ ํ๊ฒฝ์ ๋ค์ํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
{
"name": "practice-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@types/jest": "24.0.21",
"@types/node": "12.12.5",
"@types/react": "16.9.11",
"@types/react-dom": "16.9.3",
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-scripts": "3.2.0",
"typescript": "3.6.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
package.json์ ์ดํด๋ณด๋ฉด, ๋์ ๋๋ ๊ฒ์ด ๋ฐ๋ก @types๋ก ์์ํ๋ ํจํค์ง์ ๋๋ค. ์ด ํจํค์ง๋ Typescript ์ธ์ด์์ ํด๋น ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ์ฅ ํจํค์ง์ ๋๋ค.
Javascript๋ก ๊ฐ๋ฐ๋ ํจํค์ง๋ Typescript์์๋ ์ฌ์ฉํ ์๋ ์์ง๋ง Typescript๋ก declare ๋์ด ์์ด์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ธฐ์กด์ ํจํค์ง๋ค์ Javascript๋ก export ๋์ด ์๊ธฐ ๋๋ฌธ์ Typescript์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋์ Typescript์์ declare ํด์ค์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ์ ์ํ ๊ฒ์ด ๋ฐ๋ก @types/[package-name] ์ ๋๋ค.
์ฃผ์ํด์ผ ํ ์ ์ ๊ทธ๋ฌํ ํจํค์ง๊ฐ ์๊ณ , ๊ทธ๋ ์ง ์์ ํจํค์ง๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํ ๋ฉด jest, react ๋ฑ์ ๊ธฐ๋ณธ ํจํค์ง๋ ๋ณ๋๋ก ๊ตฌ์ฑ์ด ๋์ด ์์ง๋ง MobX ํจํค์ง์ ๊ฒฝ์ฐ, ๊ธฐ์กด Javascript ํจํค์ง์์ ๊ทธ๋๋ก Typescript์์๋ declare๋์ด ์๊ธฐ ๋๋ฌธ์ MobX์ ๊ฒฝ์ฐ, ๋ณ๋์ @types ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ฝ Typescript๋ก declare๋์ง ์์ ํจํค์ง๋ฅผ Typescript์์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์๋์ ์ค๋ฅ๊ฐ ๋ํ๋ฉ๋๋ค.
'Programming > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React.ts] React๋ฅผ Typescript๋ก ์์ํด๋ณด๊ธฐ - Props, State (0) | 2019.11.02 |
---|