๐พ VSCode์์ TypeScript ํ๊ฒฝ ์ค์ ํ๋ ๋ฐฉ๋ฒ
๋ณธ๊ฒฉ์ ์ผ๋ก TypeScript ํ์ต์ ํ๊ธฐ ์ํด VSCode์์ ํ๊ฒฝ ์ค์ ์ ํ๋ค. ๊ณผ์ ์ด ๋ง๋ฅ ๋จ์ํ๊ฑด ์๋๊ฒ ๊ฐ์์ ์ ๋ฆฌ๋ฅผ ํด๋๊ธฐ๋ก ํ๋ค. ํน์๋ ๋ค์์ ๋ค์ ๋ณด๊ฒ๋ ๋๋ฅผ ์ํด, ํน์ ๋์ฒ๋ผ ์ฒ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ธํ ์ ํ๋ ๋๊ตฐ๊ฐ๋ฅผ ์ํด :)
1. ์๋ก์ด ํ๋ก์ ํธ ์์ฑ (๐ learn-typescript)
# learn-typescript ํด๋์์ ์๋ก์ด ํ๋ก์ ํธ ์ด๊ธฐํ
npm init -y
โจ OPTION. scripts ๋ช
๋ น์ด๋ก build์ start ์คํํ๊ธฐ ์ํ package.json
์ค์
{
"name": "learn-typescript",
"version": "1.0.0",
"description": "",
"main": "index.js", // ์ญ์
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1", // ์ญ์
"build": "tsc", // ์ถ๊ฐ
"start": "node dist/index.js" // ์ถ๊ฐ ( node [index.js ํ์ผ์ด ๋ด๊ธฐ๋ ํด๋๋ช
] )
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": { // → 2. Typescript ์ค์น
"typescript": "^5.1.6"
}
}
2. Typescript ์ค์น
# --save-dev์ -D๋ ๊ฐ์ ์๋ฏธ
npm install -D typescript
npm install typescript --save-dev
// --save-dev๋ฅผ ํ๋ฉด devDependencies์ typescript๊ฐ ์ค์น๋๋ค.
"devDependencies": {
"typescript": "^5.1.6"
}
โ๏ธํ์ ์คํฌ๋ฆฝํธ๋ ๊ฐ๋ฐ ์์ ์๋ง ํ์ํ๊ณ ํ๋ก๊ทธ๋จ์ ์คํ ์์ ์๋ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ์์กด์ฑ(dev dependency)์ผ๋ก ์ค์นํ๋ค.
3. tsconfig.json ์์ฑ ๋ฐ ์ธํ
ํฐ๋ฏธ๋ ๋๋ ์ง์ tsconfig.json
ํ์ผ์ ์์ฑํ๋ค. ํ์ผ ์์ฑ ํ ํ์ํ ์ต์
์ ์์ฑํ๋ค.
# ํฐ๋ฏธ๋์์ tsconfig.json ์์ฑ
touch tsconfig.json
// tsconfig.json
{
"include": ["src"], // ์์น์ง์ : ํ์
์คํฌ๋ฆฝํธ๊ฐ src์ ๋ชจ๋ ํ์ผ์ ํ์ธํ๋ค๋ ์๋ฏธ
// compilerOptions ๋ด์ ์์ฑ์ ์์ ๋กญ๊ฒ ์ปค์คํ
ํ ์ ์๋ค.
"compilerOptions": {
"outDir": "./dist",
/*
outDirecory : ์ปดํ์ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์์ฑ๋ ๋๋ ํ ๋ฆฌ
(→ ./dist ๋ผ๋ ํด๋์ ๋ง๋ค๊ฒ ๋ค๋ ์๋ฏธ)
*/
"target": "ES6",
/*
target : ์ด๋ค ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ปดํ์ผํ ์ง ์ ํ ์ ์๋ค.
Create-React-App์ด๋ NextJS, NestJS๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ด๋ค๋ฉด ์์์ ์์ฑํด์ฃผ๋ ์ ๊ฒฝ์ธ ํ์ ์์.
*/
"lib": ["ES6", "DOM"],
/*
lib : ํ์
์คํฌ๋ฆฝํธ์๊ฒ ์ด๋ค API๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ค ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์คํํ๋์ง๋ฅผ ์ง์ ํด์ค๋ค.
ํ๋ก๊ทธ๋จ์ด ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ฉด "DOM" ์ ํ ์ ์๋ฅผ ํ ์ ์๋ค. (DOM ์ ํ ์ ์์ ๊ด๋ จ ์๋์์ฑ์ ์ฌ์ฉํ ์ ์์ด ํธ๋ฆฌ)
*/
"strict": true, // ๋ชจ๋ ์๊ฒฉํ ํ์
๊ฒ์ฌ ์ต์
์ ํ์ฑํ. strictํ๋๊ทธ๋ ํ๋ก๊ทธ๋จ ์ ํ์ฑ์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ณด์ฅํ๋ ๊ด๋ฒ์ํ ํ์
๊ฒ์ฌ ๋์์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
"allowJs": true, // ํ์
์คํฌ๋ฆฝํธ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํจ.
"module": "CommonJS", // ๋ธ๋ผ์ฐ์ ์ฑ์ ๋ง๋ค๊ณ ์์์ผ๋ฉด "umd"๋ฅผ ์ ํํ๋ฉด ๋จ
"sourceMap": true, // ํ์
์คํฌ๋ฆฝํธ(์๋ณธ) => ์ปดํ์ผ => ์๋ฐ์คํฌ๋ฆฝํธ(๋ณํ)
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
/*
esModuleInterop :
๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ๋ค์์คํ์ด์ค ๊ฐ์ฒด ์์ฑ์ ํตํด CommonJS์ ES ๋ชจ๋ ๊ฐ์ ์ํธ ์ด์ฉ์ฑ์ ์ ๊ณต
allowSyntheticDefaultImports :
default export๊ฐ ์๋ ๋ชจ๋์์ default imports๋ฅผ ํ์ฉ
์ฝ๋ ๋ฐฉ์ถ์๋ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ, ํ์
๊ฒ์ฌ๋ง ์ํํ๋ค.
*/
}
}
๐ฌ tsconfig.json
๊ฐ ์์ผ๋ฉด VSCode๋ ์ฐ๋ฆฌ๊ฐ typescript๋ก ์์
์ ํ๋ค๋ ๊ฒ์ ์๊ฒ๋๋ค.
๐ ์ปดํ์ผ๋ฌ ์ต์ ์ฐธ๊ณ : ํ์ ์คํฌ๋ฆฝํธ ๊ณต์๋ฌธ์
์ปดํ์ผ๋ฌ ์ต์ ์ด ๋๋ฌด ๋ง๊ธฐ๋ ํ๊ณ ์ด๋ ต๋ค๊ณ ๋๊ปด์ ธ์ ๊ณต์๋ฌธ์๋ฅผ ๋น๋กฏํ ๋ค๋ฅธ ๋ธ๋ก๊ทธ ์๋ฃ๋ค์ ์ฐธ๊ณ ํ๋ค.
4. index.ts ์์ฑ (๐ learn-typescript > src)
ํ์ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ง๋ค์ด๋ณด์.
// index.ts
const sum = (a: number, b:number) => {
return a + b
}
console.log(sum(10, 20));
5. index.ts → index.js๋ก ์ปดํ์ผ
๋ธ๋ผ์ฐ์ ๋ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ํด์ํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ ๋จ๊ณ์์ ์์ฑํ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ฐฐํฌ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ ์ปดํ์ผ ์์ ์ด ํ์ํ๋ค.
ํฐ๋ฏธ๋์ tsc
๋ฅผ ์
๋ ฅํ๋ฉด tsconfig.json
ํ์ผ์ ์ฐธ์กฐํ์ฌ ์ปดํ์ผ์ ์คํํ๋ค.
# tsconfig.json์ ๋ํ fs๋ฅผ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฒํ ํ์ฌ ์ปดํ์ผ ์คํ
tsc
# ์ปดํ์ผ๋ฌ ๊ธฐ๋ณธ๊ฐ์ผ๋ก index.ts๋ง ํธ๋์คํ์ผ
tsc index.ts
# ๊ธฐ๋ณธ ์ค์ ์ผ๋ก src ํด๋ ์์ ๋ชจ๋ .ts ํ์ผ์ ํธ๋์คํ์ผ
tsc src/*.ts
# tsconfig.json์ ์ปดํ์ผ๋ฌ ์ค์ ์ผ๋ก src ํด๋ ์์ ๋ชจ๋ .ts ํ์ผ์ ํธ๋์คํ์ผ
tsc --project tsconfig.json src/*.ts
ํ์ ์คํฌ๋ฆฝํธ ๊ณต์๋ฌธ์ ์ถ์ฒ
tsc --project ./tsconfig.json
โฌ๏ธ compile โฌ๏ธ
// index.js
const sum = (a, b) => {
return a + b;
};
console.log(sum(10, 20));
//# sourceMappingURL=index.js.map
dist > index.js
์ปดํ์ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์์ฑ๋๋ค.
โจ OPTION. ์ปดํ์ผ๊ณผ ์คํ(build & start)์ ๋์์ ํ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ 1. package.json์ script์ build, start ์ถ๊ฐ
// package.json
"scripts": {
"build": "tsc",
"start": "node dist/index.js" // node [index.js ํ์ผ์ด ๋ด๊ธฐ๋ ํด๋๋ช
]
},
# build์ start๋ฅผ ์ถ๊ฐํ ํ ์๋ ๋ช
๋ น์ด๋ก npm build์ start ๊ฐ ํจ๊ป ๊ฐ๋ฅํ๋ค.
npm run build && npm start
๋ฐฉ๋ฒ 2. ts-node & nodemon ํ์ฉํด ์ค์๊ฐ์ผ๋ก ์ปดํ์ผ ๊ฒฐ๊ณผ ํ์ธ
nodemon
์ ํ์ฉํด TypeScript ํ์ผ์ ์ปดํ์ผ ํ์ง ์๊ณ ๋ฐ๋ก ์คํ์ ์๋ค. ์์ ํ ๋ฐ๋ก ๋ฐ์๋์ด ์ค์๊ฐ์ผ๋ก ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๐ nodemon
์ node monitor์ ์ฝ์๋ก, ๋
ธ๋๊ฐ ์คํํ๋ ํ์ผ์ด ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ์ํ๊ณ ์๋ค๊ฐ ํ์ผ์ด ์์ ๋๋ฉด ์๋์ผ๋ก ๋
ธ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์์ํ๋ ํ์ฅ ๋ชจ๋์ด๋ค. nodemon์ ์ค์นํ๋ฉด ์ฌ์์ ์์ด ์ฝ๋๋ฅผ ์๋ ๋ฐ์ ํ ์ ์๋ค.
# ๊ฐ๋ฐ์์๋ง ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก -D(--save-dev) ์ต์
์ผ๋ก ์ค์น
npm i -D nodemon
npm i -D ts-node
// package.json script ์ค์
"scripts": {
"dev": "nodemon --exec ts-node src/index.ts"
},
# ์คํ
npm run dev
# ์ข
๋ฃ (Mac)
control C
# JS๋ก ์ปดํ์ผ์ tsc๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
โ ts-node๋ง ์ฌ์ฉํด๋ ์ปดํ์ผ ํ์ง ์๊ณ ts ํ์ผ์ ์คํํ ์ ์๋ค.
nodemon
์ ์ฌ์ฉํ์ง ์๊ณ ts-node
๋ง ์ฌ์ฉํด๋ TypeScript ํ์ผ์ ์ปดํ์ผํ์ง ์๊ณ ์คํํ ์ ์๊ฒ ํด์ค๋ค.
# ๊ฐ๋ฐ์์๋ง ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก -D(--save-dev) ์ต์
์ผ๋ก ์ค์น
npm i -D ts-node
ํ๋ก๋์ ์์ ์ฌ์ฉํ๋ ํจํค์ง๋ ์๋๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น ๋ฅด๊ฒ ์๋ก๊ณ ์นจ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ๋น๋ํ ๋ค์์ ์ฝ๋๋ฅผ ์คํํ์ง ์์๋ ts-node๊ฐ ์ปดํ์ผํ ํ์์์ด ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋์ ์คํํด์ค๋ค.
// package.json script ์ค์
"scripts": {
"dev": "ts-node src/index"
},
# ์คํ
npm run dev
# JS๋ก ์ปดํ์ผ์ tsc๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
๐ nodemon์ ํ์ผ ์ ์ฅ์ ์๋์ผ๋ก ๋ฐ์์ด ๋๊ณ , ts-node๋ง ์ฌ์ฉํ๋ฉด ํฐ๋ฏธ๋์ ๋งค๋ฒ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค์ผ ํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค. ts-node๋ง ์ฌ์ฉํ๋ , nodemon๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ์ปดํ์ผ์ ๋ฐ๋ก ๋์ง ์์ผ๋ฏ๋ก JS๋ก ์ปดํ์ผ์ ์ํ๋ค๋ฉด tsc ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค์ผ ํ๋ค.
โ๏ธ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์๋ชป๋ ์ ๋ณด๋ ๋ ๊ณต์ ํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐
'Frontend Dev > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ ์คํฌ๋ฆฝํธ์ Enums(์ด๊ฑฐํ) ํ์ ์ ๋ํด ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ์์๋ณด์ (0) | 2023.07.30 |
---|---|
ํ์ ์คํฌ๋ฆฝํธ ์ ๋์จ/๊ต์ฐจ ํ์ ๊ณผ ๋ฆฌํฐ๋ด ํ์ (0) | 2023.07.29 |