2025. 10. 25. 11:00ใFront-end/TypeScript
๋ชฉ์ฐจ
0. TypeScript๋?
1. ์ ๋ฐ์ ๋์ ํ๋ฆ
2. ํ์ฑ(Parsing)๊ณผ AST ์์ฑ
3. ํ์ ๊ฒ์ฌ
4. ์ ์ธ ํ์ผ(.d.ts)๊ณผ DefinitelyTyped(@types)์ ์ญํ
5. ํธ๋์คํ์ผ(emit)๊ณผ ์ถ๋ ฅ(JS, sourcemap)
6. ๋ชจ๋ ํด์๊ณผ tsconfig ์ต์
7. ์ธ์ด ์๋น์ค์ ์๋ํฐ ํตํฉ
8. ๋น๋ ์ต์ ํ
9. ๋ฐํ์๊ณผ์ ๊ด๊ณ
10. ์ค๋ฌด์์ ์ฃผ์ํ ์
0. TypeScript๋?
JS์ ์์ ์ํผ์ ์ผ๋ก, ์ ์ ํ์ ์์คํ ์ ์ ๊ณตํ๊ณ , ์ปดํ์ผ๋ฌ(tsc)๋ฅผ ํตํด JS๋ก ํธ๋์คํ์ผ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ ์์ฒด๋ ๋ฐํ์์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, ์ปดํ์ผ ํ์ ์ ํ์ ๊ฒ์ฌ, ๊ฐ๋ฐ ๋๊ตฌ ํตํฉ์ด ํต์ฌ ๊ฐ์น์ด๋ค.
1. ์ ๋ฐ์ ๋์ ํ๋ฆ
TypeScript ์์ค (.ts, .tsx, .d.ts)๊ฐ ์ฒ๋ฆฌ๋๋ ํฐ ํ๋ฆ์ ์๋์ ๊ฐ๋ค.
- ํ์ฑ(Parsing) : ์์ค ์ฝ๋๋ฅผ ํ ํฐํ ํ์ฌ AST(Abstract Syntax Tree)๋ฅผ ์์ฑ
- ํ์ ๊ฒ์ฌ (Type Checking) : 1์์ ์์ฑํ AST ์์์ ํ์ ์ถ๋ก ๋ฐ ํ์ ๊ฒ์ฌ ์ํ
- ํธ๋์คํ์ผ(Emit) : ํ์ ์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๊ณ ๋์ JS ๋ฒ์ ์ผ๋ก ๋ณํ (+ sourcemap, ์ ์ธํ์ผ ์์ฑ ์ต์ ์ฒ๋ฆฌ)
- ๋น๋/๋ฒ๋ค๋จ๊ณ(ํตํฉ) : tsconfig, ํ๋ก์ ํธ ๋ ํผ๋ฐ์ค์ ๋ฐ๋ผ ๋น๋ ์ํ
1. ํ์ฑ(Parsing)
tsc๊ฐ ์์ค ์ฝ๋๋ฅผ ํ์ฑํ์ฌ ๊ตฌ๋ฌธ ํธ๋ฆฌ(CST) ๋ฐ AST๋ฅผ ์์ฑํ๋ค.
์ด ๋จ๊ณ์์ ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ํ์ง๋๋ค.
AST์๋ ๊ฐ ๋ ธ๋์ ์์น, ํ ํฐ ์ ํ, ์์ ๋ ธ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ,
์ดํ์ ์ฌ๋ณผ ํ ์ด๋ธ ๊ตฌ์ถ๊ณผ ์ ์ดํ๋ฆ ๋ถ์์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋ค.
2. ํ์ ๊ฒ์ฌ (Type Checking)
ํ์ ์คํฌ๋ฆฝํธ์ ํต์ฌ ๋ถ๋ถ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. AST์์์ ๋์ํ๋ ํ์ ์ฒด์ปค๋ ์ฌ๋ณผ ํ ์ด๋ธ์ ๋ง๋ค๊ณ , ํํ์๊ณผ ์ ์ธ์ ์ํํ๋ฉฐ
ํ์ ํธํ์ฑ์ ํ๋จํ๋ค.
3. ํธ๋์คํ์ผ(Emit)
ํ์ ๊ฒ์ฌ ํ ์ปดํ์ผ๋ฌ๋ ํธ๋์คํ์ผ ๋จ๊ณ์์ ํ์ ์ด๋ ธํ ์ด์ (annotation)์ ์ ๊ฑฐํ๊ณ ๋์ JS ๋ฒ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ค.
- ํ๊น(Target) : tsconfig.json์ target ์ต์ ์ ๋ฐ๋ผ ๋ฌธ๋ฒ ๋ณํ์ด ์ ์ฉ๋๋ค.
- ๋ชจ๋์์คํ : module ์ต์ ์ ๋ฐ๋ผ import, export ์ฒ๋ฆฌ ๋ฐฉ์์ด ๊ฒฐ์ ๋๋ค
- source map : ๋๋ฒ๊น ์ ์ํด ์์ค ๋งต(.map)์ ์์ฑํ๋ฉด, ๋ธ๋ผ์ฐ์ /๋๋ฒ๊ฑฐ์์ ์๋ณธ TS ์์น๋ก ๋งคํ์ด ๊ฐ๋ฅํ๋ค.
- ์ ์ธ ํ์ผ ์์ฑ : ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ, .d.ts๋ฅผ ํจ๊ป ์์ฑํ ์ ์๋ค.
์ฐธ๊ณ
์ฐธ๊ณ ์๋ฃ๋งํฌ
'Front-end > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| JavaScript๊ฐ ์๋ TypeScript๋ฅผ ์ฌ์ฉํ๋ ์ด์ (0) | 2025.10.25 |
|---|---|
| TS: ํ๋ก์ ํธ ์ด๊ธฐ ์ค์ (2) | 2025.07.03 |
| @types : JS ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ TS ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ (0) | 2025.07.03 |
| TypeScript์์์ ํ์ด์ง ์ด๋ : Link (0) | 2025.03.29 |
| ํ์ ์คํฌ๋ฆฝํธ(TypeScript)๋? (0) | 2025.03.26 |
GitHub