let's get IT with DAVINA ๐ป
TypeScript(apply) ๋ณธ๋ฌธ
1. package.json ์ด๊ธฐํ
//terminal
mkdir typechain
code typechain
//vsc์ด๋ฆฐ๋ค
//typechain/ํตํฉterminal
npm init-y
- package.json
package.jsonํ์ผ์ด ์์ฑ๋๋ฉด,
"main": "index.js" ์์ ๊ณ , scripts ์์ test๋ถ๋ถ ์์ ๊ณ ์์ ใฑใฑ
{
"name": "typechain",
"version": "1.0.0",
"description": "",
"scripts": {
"build": "tsc",
"dev": "nodemon --exec ts-node src/index.ts", //srcํด๋ ์์ index.tsํ์ผ์ ์ฝ๋งจ๋๋ค์ ์๋ ์คํ์์ผ์ค
"start": "node build/index.js" //start๋ฅผ ์คํํ๋ฉด build ํด๋ ์์ index.js ํ์ผ์ ์คํ
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"ts-node": "^10.9.1",
"typescript": "^4.9.5"
},
"dependencies": {
"nodemon": "^2.0.20"
}
}
2. typescript ์ค์น
//ํตํฉterminal๋ก ๋์์์
npm i -D typescript //ts๊ฐ devDependencies์ ์ค์น๋จ (์๊ธฐ package.json ์ฐธ๊ณ )
touch tsconfig.json //vs code์๊ฒ ์ฐ๋ฆฌ๊ฐ ts๋ก ์์
ํ๋ค๋๊ฒ์ ์๋ ค์ค "ํ์ผ๋ช
์ ๋ฌด์กฐ๊ฑด tsconfig.json"
npm run build && npm start → ๊ณ์ ์ด ์์ ์ ๋ฐ๋ณตํ๋ฉด ๋นํจ์จ์ ์ด๊ณ ๊ท์ฐฎ๊ฒ ์ฐ!?!?
npm i -D ts-node
npm i nodemon
โญ๏ธ ts-node
๋น๋/์ปดํ์ผ ํ ํ์ ์์ด TS ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค.
ts-node๋ Node.js์ฉ TypeScript ์คํ ์์ง ๋ฐ REPL์ ๋๋ค. JIT๋ TypeScript๋ฅผ JavaScript๋ก ๋ณํํ๋ฏ๋ก ์ฌ์ ์ปดํ์ผ ์์ด Node.js์์ TypeScript๋ฅผ ์ง์ ์คํํ ์ ์์ต๋๋ค.
โญ๏ธ nodemon
์๋ฒ๋ฅผ ์ฌ์์ํ ํ์ ์์ด, command๋ฅผ auto-refresh ์์ผ์ค๋๋ค.
3. tsconfig.json ํ์ผ ์ค์
include
- tsํ์ผ๋ค์ด ์ด๋ ํด๋ ์์ ์์นํ์ง ์ง์ผ๋ณด๊ธฐ๐ ๐
compilerOptions
{
"include": ["src"], //tsํ์ผ๋ค์ด ์ด๋์ ์์ด? ์ง์ผ๋ด
"compilerOptions": {
"outDir": "build", //ts->js๋ก ์ปดํ์ผ๋๊ฑด ์ด๋์๋ค ์ ์ฅํ ๊บผ์ผ?
"target": "ES6", //js๋ก ์ปดํ์ผ๋ ๋ ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ ์ง ์ ํ ๊ฐ๋ฅ (ES6 ์ ค ์ถ์ฒ)
"lib": ["ES6", "dom"], //ES6์ ์ง์ํ๋ ์๋ฒ & DOM, ์ฆ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์คํ์ํฌ๊บผ์ผ ex)DOM: window, document, localStorage ๋ฑ๋ฑ..
"strict" : true, //strict๋ชจ๋ ์คํ
"allowJs": true, //js์ฝ๋ ์ฝ์ด์ฌ ์ ์๊ฒ๋จ
"esModuleInterop": true,
"module": "CommonJS"
}
}
- outDir
- ts→js๋ก ์ปดํ์ผ๋ ํ์ผ ์ ์ฅ ์์น ์ ํ โ
- target
- ts→js๋ก ์ปดํ์ผ ๋ ๋, ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ ๊ป์ง ์ ํ โ
โญ๏ธ TARGET
์ต์ ๋ธ๋ผ์ฐ์ ๋ ๋ชจ๋ ES6 ๊ธฐ๋ฅ์ ์ง์ํ๋ฏ๋ก ES6๋ ์ข์ ์ ํ์ ๋๋ค. ์ฝ๋๊ฐ ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌ๋ ๊ฒฝ์ฐ ๋ ๋ฎ์ target์ ์ค์ ํ๊ฑฐ๋ ์ต์ ํ๊ฒฝ์์ ์ฝ๋ ์คํ์ด ๋ณด์ฅ๋๋ ๊ฒฝ์ฐ ๋ ๋์ target์ ์ค์ ํ๋๋ก ์ ํํ ์ ์์ต๋๋ค.
ex) ํ์ดํ ํจ์() => this๋ ES5 ์ดํ์ด๋ฉด ํจ์ ํํ์์ผ๋ก ๋ฐ๋๋๋ค.
ํน๋ณํ ESNext ๊ฐ์ TypeScript ๋ฒ์ ์ด ์ง์ํ๋ ๊ฐ์ฅ ๋์ ๋ฒ์ ์ ๋ํ๋ ๋๋ค. ์ด ์ค์ ์ ๋ค๋ฅธ TypeScript ๋ฒ์ ๊ฐ์ ๋์ผํ ์๋ฏธ๊ฐ ์๋๋ฉฐ ์ ๊ทธ๋ ์ด๋๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ES3 ๊ธฐ์ค
- ES6 ๊ธฐ์ค
- lib
- js ์ฝ๋๊ฐ ์ด๋์์ ๋์ํ ์ง ์๋ ค์ค โ
- ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ์ด๋ค API๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ค ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์คํํ๋ ์ง๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. (target ๋ฐํ์ ํ๊ฒฝ์ด ๋ฌด์์ธ์ง๋ฅผ ์ง์ ํฉ๋๋ค.)
- ์๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ์ง๋กฑ! ํธ๋ฆฌํธ๋ฆฌ!
- TS๋ Math์ฒ๋ผ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋ JS API์ ๋ํ ํ์ ์ ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- strict
- ๋ชจ๋ ์๊ฒฉํ ํ์ ๊ฒ์ฌ ์ต์ ์ ํ์ฑํํฉ๋๋ค. ๐
- ex1) ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด์ง ํจํค์ง๋ฅผ ์ค์นํ์ ๋, ํ์ ์คํฌ๋ฆฝํธ์ ๊ทธ ํจํค์ง์ ํ์ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ
- strict ํ๋๊ทธ๋ ํ๋ก๊ทธ๋จ ์ ํ์ฑ์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ณด์ฅํ๋ ๊ด๋ฒ์ํ ํ์ ๊ฒ์ฌ ๋์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- strict:true๋ฅผ ํตํด Declaration Files๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋ํด์๋ ์๋ฌ๋ฅผ ๋์์ค๋๋ค. โ๏ธ
โญ๏ธ Declaration
⇒ How we explain to TS the types of NodeJS
⇒ ๋ณดํต d.ts ํ์ผ๋ค์ ์น์ ํ ๋๊ตฐ๊ฐ๊ฐ ๋ค ํ์ ์ ์ง์ /์ ์ํด์ค์ ์ฐ๋ฆฌ๊ฐ ์ฝ์ด์ฌ ์ ์๋๊ฑฐ์!
- allowJs
- TSํ์ผ์ด JSํ์ผ์ ์ฝ๋๋ฅผ ์ฝ์ด์ฌ ์ ์๊ฒ ํ์ฉํด์ค๋๋ค. ๐
- ex2) ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ TS๋ณดํธ์ฅ์น๋ก ๋ณดํธ๋ฐ๊ณ ์ถ์ ๋ (JSํ์ผ์ ์๊ฑด๋๋ฆฌ๋ฉฐ..)
1. TS์์ JSํ์ผ importํ๊ธฐ ์ํด (์ฝ์ด์ค๊ธฐ ์ํด) allowJs:true๋ก ์ค์ !
2. TS์ ๋ณดํธ์ฅ์น๋ก ๋ณดํธ๋ฐ๊ณ ์ถ์ JSํ์ผ์์ ํด๋น ๋ถ๋ถ์ ์ฃผ์! @ts-check
3. /** */ + ENTER ⇒ JSDoc comment ์์ฑ (์ฌ๊ธฐ์ ํด๋น d.tsํ์ผ๋ค ์ฒ๋ผ type๋ค ์ง์ )
⇒ comment์ผ ๋ฟ์ด๋๊น JS์ฝ๋์ ์๋ฌด ์ง์ฅ์ ์ฃผ์ง ์์ผ๋ฉด์, type์ ์ง์ ํด์ค์ typeScript์ ๋ณดํธ์ฅ์น๋ ๋ฐ์!! very nice~~๐คฉ
โ difference between import {} from “./file” VS import {} from “file”
⇒ import {} from "file" is for a module you install with npm.
"./file" is for a file you create.
- esModuleInterop
- CommonJS ๋ชจ๋์ ES6 ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค๋ก ๊ฐ์ ธ์ค๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- ES6 ๋ชจ๋ ์ฌ์์ ์ค์ํ์ฌ CommonJS๋ชจ๋์ ์ ์์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํด์ค๋๋ค.
'DEV_IN > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ์กด React์ TypeScript ์ ์ฉํ๊ธฐ (4) | 2023.03.03 |
---|---|
โ๏ธ ์์ฃผ ๋ณผ ์ ์๋ Errors (0) | 2023.02.17 |
TypeScript(Interface) (4) | 2023.02.16 |
TypeScript(Classes) (4) | 2023.02.12 |
TypeScript (Function) (3) | 2023.02.09 |
Comments