title | layout | permalink | oneline |
---|---|---|---|
Using Babel with TypeScript |
docs |
/docs/handbook/babel-with-typescript.html |
How to create a hybrid Babel + TypeScript project |
๋ชจ๋ JavaScript ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋, TypeScript์์ JavaScript ํ์ผ๋ก ๋ณํํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ ์ ์์ต๋๋ค.
๋ง์ ๊ฒฝ์ฐ ๊ทธ ๋๋ต์ ํ๋ก์ ํธ์ ๋ฐ๋ผ "~์ ๋ฌ๋ ค์๋ค" ๋๋ "๋๊ตฐ๊ฐ ์ฌ๋ฌ๋ถ ๋์ ๊ฒฐ์ ํ์์ง๋ ๋ชจ๋ฅธ๋ค` ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ tsdx, Angular, NestJS์ ๊ฐ์ ๊ธฐ์กด ํ๋ ์์ํฌ ๋๋ Getting Started์ ์ธ๊ธ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์๋ค๋ฉด ๊ฒฐ์ ์ ์ฌ๋ฌ๋ถ ์์ ๋ฌ๋ ค์์ต๋๋ค.
ํ์ง๋ง, ์ฌ์ฉํ ๋งํ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋น๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์์ค ์
๋ ฅ ํ์ผ์ด ๊ฑฐ์ ๋น์ทํ๊ฐ์?
tsc
๋ฅผ ์ฌ์ฉํ์ธ์. - ์ฌ๋ฌ ์ ์ฌ์ ์ธ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋ ๋น๋ ํ์ดํ๋ผ์ธ์ด ํ์ํ์ ๊ฐ์?
babel
๋ก ํธ๋์คํ์ผ๋ง์ ํ๊ณ ,tsc
๋ก ํ์ ์ ๊ฒ์ฌํ์ธ์.
JavaScript ์ฝ๋ ๋ฒ ์ด์ค์์ TypeScript๋ก ํฌํ ๋์์ ์ ์๋ ๊ธฐ์กด ๋น๋ ์ธํ๋ผ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ๋ก์ ํธ์ ์ผ๋ฐ์ ์ธ ํจํด์ ๋๋ค.
์ด ๊ธฐ์ ์, Babel์ preset-typescript์ ์ฌ์ฉํ์ฌ JS ํ์ผ์ ์์ฑํ ํ, TypeScript๋ฅผ ์ฌ์ฉํ์ฌ ํ์
๊ฒ์ฌ ๋ฐ .d.ts
ํ์ผ์ ์์ฑํ๋ ๋ณตํฉ ์ ๊ทผ ๋ฐฉ์์
๋๋ค.
Babel์ TypeScript๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด ๋น๋ ํ์ดํ๋ผ์ธ์ผ๋ก ์์ ํ ์ ์๊ณ Babel์ด ์ฝ๋ ํ์ ์ ๊ฒ์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ JS ์ถ๋ ฅ ์๊ฐ์ด ๋ ๋นจ๋ผ์ง ์ ์์ต๋๋ค.
Babel ์ฌ์ฉ์ ๋จ์ ์ TS๋ฅผ JS๋ก ์ ํํ๋ ๋์ ํ์ ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ์ฆ, ์๋ํฐ์์ ํ์ ์ค๋ฅ๋ฅผ ์ก์ง ๋ชปํ๊ณ ์์ฉ ์ฝ๋์ ํฌํจ๋ ์๋ ์๋จ ๋ป์ ๋๋ค.
๋ํ, Babel์ TypeScript์ ๋ํ .d.ts
ํ์ผ์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๊ฒฝ์ฐ ์์
ํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด TSC๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ํ์
์ ๊ฒ์ฌํ ์ ์๋ ๋ช
๋ น์ด๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ Babel ๊ตฌ์ฑ์ ์ผ๋ถ๋ฅผ ํด๋น tsconfig.json
์ ๋ณต์ ํ๊ณ , ๋ค์ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์๋์ง ํ์ธํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค:
"compilerOptions": {
// tsc๋ฅผ ์ฌ์ฉํด .js ํ์ผ์ด ์๋ .d.ts ํ์ผ์ด ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
"declaration": true,
"emitDeclarationOnly": true,
// Babel์ด TypeScript ํ๋ก์ ํธ์ ํ์ผ์ ์์ ํ๊ฒ ํธ๋์คํ์ผํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
"isolatedModules": true
}
ํด๋น ํ๋๊ทธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ๊ณ ํด์ฃผ์ธ์: