TypeScript
JavaScript์ ์ ์ ํ์ดํ๊ณผ ์ ํ์ ํ์ annotation์ด ์ถ๊ฐ๋ ์ธ์ด๋ก, ํฐ ์ค์ผ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํด ์ค๊ณ๋จ
ํน์ง
- ์์ ์งํฉ : JavaScript์ ์์ ์งํฉ์ผ๋ก, ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ ๊ตฌ๋ฌธ์ ์ผ๋ก ์ ํจํ ํ์ ์คํฌ๋ฆฝํธ์
- ํฌ๋ก์ค ํ๋ซํผ : ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋ชจ๋ ํ๋ซํผ์์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋จ
- ๊ฐ์ฒด ์งํฅ ์ธ์ด : ํด๋์ค, ์ธํฐํ์ด์ค, ๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ ์ ๊ณต
- ์ ์ ํ์ ๊ฒ์ฌ : ์ ์ ํ์ดํ์ ์ฌ์ฉํด annotation(ํ์ ์ฃผ์)์ ํตํด ์ํ๋จ => ์ปดํ์ผ ์ ํ์ ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํด ์คํฌ๋ฆฝํธ๋ฅผ ๋งค๋ฒ ์คํํ์ง ์์๋ ์ค๋ฅ ์ฐพ๊ธฐ๊ฐ ์ฌ์
- ํ์ ์ถ๋ก : ๋ณ์๊ฐ ํ์ ์์ด ์ ์ธ๋๋ฉด ๊ทธ ๊ฐ์ ๊ธฐ๋ฐํด ํ์ ์ ์ถ๋ก ํ๋ ๊ธฐ๋ฅ ์ ๊ณต
- ์ ํ์ ์ ์ ํ์ดํ : ์ ์ ํ์ ์ด ์ ํ์ ์
* Type Annotation(ํ์ ์ฃผ์) : ํ์ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก ๋ณ์, ํจ์, ๊ฐ์ฒด ๋ฑ์ ๋ช ์์ ์ผ๋ก ํ์ ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ -> ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ๊ฒ์ฌ ์ํ
JS vs TS
ํน์ง | JS | TS |
ํ์ ์์คํ | ๋์ ํ์ / ๋ณ์์ ํ์ ์ด ๋ฐํ์์ ๊ฒฐ์ ๋จ | ์ ์ ํ์ / ๋ณ์์ ํ์ ์ด ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ๋จ |
ํ์ ์์ ์ฑ | ๋ฎ์ / ํ์ ์ค๋ฅ๊ฐ ๋ฐํ์์ ๋ฐ์ํ ์ ์์ | ๋์ / ํ์ ์ค๋ฅ๊ฐ ๋๋ถ๋ถ ์ปดํ์ผ ์์ ์์ ๋ฐ๊ฒฌ |
์ปดํ์ผ | ์ธํฐํ๋ฆฌํฐ ์ธ์ด / ์์ค ์ฝ๋๊ฐ ๋ฐํ์์ ํด์๋จ | ์ปดํ์ผ ์ธ์ด / TS๊ฐ JS๋ก ์ปดํ์ผ๋ผ ์คํ |
ํ์ต ๊ณก์ | ๋น๊ต์ ์ฌ์ | JS๋ณด๋ค ์ด๋ ค์ ํ์ ์์คํ ๋ฐ ์ถ๊ฐ ๋ฌธ๋ฒ ํ์ต ํ์ |
์ธํฐํ์ด์ค์ ์ ๋ค๋ฆญ | X | ์ง์ O |
ํธํ์ฑ | ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ํ๊ฒฝ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ | JS๋ก ์ปดํ์ผ๋๋ฉด ์คํ ๊ฐ๋ฅ |
ํ์ ์์คํ
- ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ฅผ ๊ตฌ๋ถํ๋ ๋ถ๋ฅ์ฒด๊ณ
- ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ์ ์ฅ๋๊ณ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํ๋์ง์ ๋ํ ๊ท์น์ ์ ์
- ์์ ์ฑ ๋ฐ ์ ๋ขฐ์ฑ ํ๋ณด๊ฐ ๋ชฉ์
ํต์ฌ ๊ฐ๋
๊ฐ๋ | ์ค๋ช |
ํ์ ์์ ์ฑ | ๋ณ์๋ ํจ์๊ฐ ์์๋ ํ์ ๋๋ก๋ง ๋์ํ๋๋ก ๋ณด์ฅ → ์๊ธฐ์น ๋ชปํ ๋์ ๋ฐฉ์ง |
ํ์ ์ถ๋ก | ๋ช ์์ ์ผ๋ก ํ์ ์ ์ ์ธํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ํ์ ์ ์ ์ถ |
์ ์ ํ์ | ์ปดํ์ผ ํ์์ ํ์ ์ด ๊ฒฐ์ ๋จ → ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ํ์ง ๊ฐ๋ฅ |
์ ๋ค๋ฆญ(generics) | ๋ค์ํ ํ์ ์ ๋ํด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ → ์ ์ฐ์ฑ + ํ์ ์์ ์ฑ ํ๋ณด |
์๋ ์๋ฆฌ
- ํ์ฑ (Parsing)
• TypeScript ์ปดํ์ผ๋ฌ(tsc)๊ฐ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ์์ฑ - ํ์
๊ฒ์ฌ (Type Checking)
• AST๋ฅผ ๋ถ์ํ์ฌ ๋ชจ๋ ๋ณ์/ํจ์/ํํ์์ ํ์ ์ ์ถ๋ก ํ๊ฑฐ๋ ํ์ธ
• ํ์ ์ค๋ฅ๊ฐ ์๋์ง ๊ฒ์ฌ - ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์ฑ (Emit)
• ํ์ ๊ฒ์ฌ๊ฐ ๋๋ ๋ค, ํ์ ์ ๋ณด(์ฃผ์)๋ ์ ๊ฑฐ๋จ
• ์์ JavaScript ์ฝ๋๋ก ํธ๋์คํ์ผ๋จ
TypeScript ์ค์น
๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ : https://www.typescriptlang.org/
# ์ ์ญ์ผ๋ก ์ค์น
npm install -g typescript@5.3.3
# -----------------
# ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ์ค์นํ ๊ฒฝ์ฐ
npm i --save-dev typescript
์ค์นํ ํ ํ์ธ์ ๋ค์๊ณผ ๊ฐ์ด ํ๋ค
# ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ํ์ธ
tsc --version
# command not found~ ๋ฉ์์ง์ ๊ฒฝ์ฐ
npx tsc --version
๊ทธ๋ค์์ ํ๊ฒฝ์ค์ ํ์ผ์ธ tsconfig.json์ ์์ฑํ๋ค. *tsconfig.json : ts ํ๋ก์ ํธ ๊ตฌ์กฐ, ์ต์ , ํ์ผ ํ๊ฒฝ ๋ฑ์ ์ง์
# TS ์ปดํ์ผ๋ฌ ์ค์ (tsconfig.json ์์ฑ)
tsc --init
# ํ
์คํธ์ฉ index.ts ํ์ผ ์์ฑ (์์
ํ๊ณ ์ ํ๋ ํ๋ก์ ํธ ํด๋ ๋ด์์)
touch index.ts
tsconfig.json
{
"compilerOptions": {
"target": "es2016", // ์ถ๋ ฅ JavaScript์ ๋ฌธ๋ฒ ๋ฒ์ (์: async/await ๊ฐ๋ฅ)
"module": "commonjs", // Node.js ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์์คํ
"esModuleInterop": true, // CommonJS ๋ชจ๋์ ES6 ์คํ์ผ(import ...)๋ก ์ฌ์ฉํ ์ ์๊ฒ ํจ
"forceConsistentCasingInFileNames": true, // ๋์๋ฌธ์ ์ผ๊ด์ฑ ์์ผ๋ฉด ์ค๋ฅ (ex: import์ ์ค์ ํ์ผ๋ช
์ด ๋ค๋ฅผ ๋)
"strict": true, // ์๊ฒฉํ ํ์
๊ฒ์ฌ ์ ์ฒด๋ฅผ ์ผฌ (์๋ ๋ชจ๋ strict ๊ณ์ด ์ต์
ํฌํจ)
"skipLibCheck": true, // node_modules ์์ .d.ts ํ์ผ ํ์
๊ฒ์ฌ๋ ์๋ต (๋น๋ ์๋ ํฅ์)
"outDir": "dist", // ์ปดํ์ผ๋ JS ํ์ผ์ด ๋์ฌ ํด๋
"noUncheckedIndexedAccess": true // ๊ฐ์ฒด์ ์ธ๋ฑ์ฑ ํ์
์ ๊ทผ ์ undefined ํฌํจํ๋๋ก ๊ฐ์ ํจ (์์ ์ฑ ↑)
// "lib": ["ES2022", "DOM"] // ์ฌ์ฉ ๊ฐ๋ฅํ ๋นํธ์ธ API ํ์
์ ์ (์: Promise, Map ๋ฑ)
},
"include": ["src/**/*"] // ์ปดํ์ผ์ ํฌํจํ ํ์ผ ๊ฒฝ๋ก๋ค (์ฌ๊ธฐ์ src ํด๋ ํ์ ๋ชจ๋)
}
index.ts
function hello(name: string) {
console.log(`Hello ${name}`);
}
hello('Typescript');
์ด๋ฅผ ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด์ผ ํ๋ค.
tsc index.ts
๊ทธ๋ฆฌ๊ณ ์ด์ ์ปดํ์ผ๋ js ํ์ผ์ ์คํ์ํค๋ฉด ๋๋ค.
node index.js
'typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TypeScript / ์ ๋ค๋ฆญ (2) | 2025.06.05 |
---|---|
TypeScript / ํด๋์ค (0) | 2025.06.05 |
TypeScript / ํ์ ์ถ๋ก , ํ์ ๋จ์ธ (0) | 2025.06.05 |
TypeScript / ํ์ (2) (0) | 2025.06.04 |
TypeScript / ํ์ (1) (0) | 2025.06.04 |