ํ์์คํฌ๋ฆฝํธ ๊ณต๋ถ, ์์ง ์ ์ ์ค์ด๋ผ ๋จธ๋ฆฌ๊ฐ ๋ฐ์๋๋ฆฌ์ง ์์์ผ๋ก, ๋ณต์ต๊ณผ ์ค์ต์ด ํ์ํ ์์ ์
๊ฐ์ฅ ๊ธฐ์ด์ ์ธ TS ์
ํ
์ ๋ํด ๊ธฐ๋กํ๋ค!
์ฐธ๊ณ ๋ก ๋ MacOS!
TS ์
ํ
์ผ๋จ Node.js ์ค์น๊ฐ ๋์ด์๋ ์ ์ ํ์ ๋ค์ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถ์ ๋ํด ๋จ๊ธด๋ค!
ํ์
์คํฌ๋ฆฝํธ ์ค์น
ํฐ๋ฏธ๋์ npm i typescript -g ๋ช
๋ น์ด๋ฅผ ์คํ
- ๋ช
๋ น์ด ์คํ์ด ๋๋๋ฉด ํฐ๋ฏธ๋์ tsc ๋ช
๋ น์ด๋ฅผ ์คํํด -> ๋ช
๋ น์ด๊ฐ ์ ๋๋ก ์คํ์ด ๋๋ฉด TypeScript๊ฐ ์ ๋๋ก ์ค์น๊ฐ ๋ ๊ฒ!
tsc (ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ)
- ์ฃผ์ ๋ช
๋ น์ด
tsc โ-init
- tsconfig.json์ด ์์ฑ๋๋ ๋ช
๋ น์ด
tsc index.ts
- index.ts๋ฅผ ์ปดํ์ผ ํ๋ค!
tsc src/*.ts
- src ๋๋ ํ ๋ฆฌ ์์ ์๋ ๋ชจ๋ TypeScript ํ์ผ์ ์ปดํ์ผ
tsc index.js --declaration --emitDeclarationOnly
- @types ํจํค์ง๋ฅผ ์ํ.d.ts ํ์ผ ์์ฑ์ ํ๋ ๋ช
๋ น
- TypeScript๋ก ์์ฑ๋ ๋ชจ๋์ด ์๋๋ผ JavaScript๋ก ์์ฑ๋ ๋ชจ๋์ ํ์
์ ์ธ์ ์ ๊ณตํ ๋ ์ ์ฉํ๊ฒ ์ฐ์!
tsconfig.json
tsc --init ๋ช
๋ น์ ์คํํ๋ฉด ์์ฑ๋๋ ํ์ผ -> tsconfig.json
- TypeScript ํ๋ก์ ํธ์ ์ค์ ํ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ!
- ์ฃผ๋ก ํ๋ก์ ํธ์ ์ปดํ์ผ ์ต์
๋ฐ ์
๋ ฅ ํ์ผ๋ค์ ์ ์ํ๋๋ฐ ์ฌ์ฉ!
tsconfig.json ์ฃผ์ ์ต์
compilerOptions - target ์ต์
- TypeScript ํ๋ก์ ํธ ๋ด ์ฝ๋๋ค์ด ์ด๋ค JavaScript ๋ฒ์ ์ผ๋ก ๋ณํ์ ํ ์ง ์ ํ๋ ์ต์
es5 ๋ก ์ค์ ํ๋ฉด CommonJS ๋ฒ์ ์ผ๋ก ์ปดํ์ผ๋๊ณ
es2016(=es7) ๋ก ์ค์ ํ๋ฉด ES2016 ๋ฒ์ ์ผ๋ก ์ปดํ์ผ์ด ๋จ!
- TypeScript๊ฐ ์ด๋ ํ๊ฒฝ์์ ์คํ์ด ๋์ด์ผํ๋์ง๋ฅผ ๊ณ ๋ คํด์ผ ๋จ!
- ๋ง์ฝ, ๋ด๊ฐ ๋ง๋ ํ๋ก์ ํธ๊ฐ ์๊ฐ๋ณด๋ค ๋ ๊ฑฐ์ํ ํ๊ฒฝ์์ ๋์ํด์ผ ๋๋ค๋ฉด? โ es5
- ๊ทธ๋ ์ง ์๋ค๋ฉด โ es2016
compilerOptions - module ์ต์
- TypeScript ํ์ผ์ ์ปดํ์ผํ ํ ์์ฑ๋๋ JavaScript ๋ชจ๋์ ํ์์ ์ง์
- ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ ๋ด๋ณด๋ด๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ์ต์
- target ์ต์
๊ณผ๋ ์๋ก ๋
๋ฆฝ์ ์ธ ๊ด๊ณ๋ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ต์
์ ์ค์
compilerOptions - outDir ์ต์
- ์ปดํ์ผ๋ JavaScript ํ์ผ์ด ์ ์ฅ๋ ์ถ๋ ฅ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์
- ์๋ฅผ ๋ค์ด, "outDir": "dist"๋ก ์ค์ ํ๋ฉด ์ปดํ์ผ๋ ํ์ผ๋ค์ด dist ํด๋์ ์ ์ฅ
compilerOptions - strict
- ์๊ฒฉํ ํ์
๊ฒ์ฌ ์ต์
์ ๋ชจ๋ ํ์ฑํํ๋ ์ต์
- TypeScript ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ค ์๊ฒฉํ ํ์
๊ฒ์ฌ๋ฅผ ์ํํด ์ฝ๋์ ์ค์๋ฅผ ๋ฏธ๋ฆฌ ์ฐพ์๋ผ ์ ์์
- ํด๋น ์ต์
์ true๋ก ์ค์ ํ๋ฉด ์๋์ ์ต์
๋ค์ด ์๋์ผ๋ก true๋ก ์ค์
: strictNullChecks
-> ์ ์ฌ์ ์ผ๋ก null(undefined)์ด ๋ ์ ์๋ ๊ฐ๋ค์ ๋ํด์ ์๊ฒฉํ๊ฒ ํ์ธํ๋ ์ต์
!
: strictFunctionTypes
: strictBindCallApply
: strictPropertyInitialization
: noImplicitAny
-> ํจ์์ ์ธ์ ๋๋ ๋ณ์์ ํ์
์ด ๋ช
์์ ์ผ๋ก ์ ์ธ๋์ง ์์ ๊ฒฝ์ฐ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก any
ํ์
์ ๋ถ์ฌํ์ง ์๋๋ก ํจ, ์ด ์ต์
์ ํ์ฑํํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋๋ฝ๋ ํ์
์ ์ธ์ ํ์ธํ๊ณ ๋ช
์์ ์ผ๋ก ํ์
์ ์ ์ธํ ์ ์๋ค!
: noImplicitThis
; alwaysStrict
compilerOptions - sourceMap ์ต์
- ์ปดํ์ผ๋ JavaScript ํ์ผ์ ๋ํ ์์ค ๋งต์ ์์ฑํ๋ ์ต์
- ์์ค ๋งต์ ์ฌ์ฉํ๋ฉด ์คํ ์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์๋ TypeScript ์์ค ์ฝ๋์ ์์น๋ฅผ ํ์ธํ ์ ์๋ค.
- ์ฝ๋ ๋๋ฒ๊น
์ ๋งค์ฐ ํฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ผญ true๋ก ์ค์ ํ์๋ ๊ฒ์ ๊ถ์ฅํ์ง๋ง ํ๋ก๋์
ํ๊ฒฝ์์๋ ์ฉ๋์ด๋ ์ฑ๋ฅ์์ ์ด์ ๋ก sourceMap์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๋์ ์ ์๋ค.
include , exclude ์ต์
- tsc๊ฐ ์ปดํ์ผ์ ํ ๋ ํฌํจํ๊ฑฐ๋ ์ ์ธํ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ๋ ์ต์
- โinclude": ["src/*/"]
- src ๋๋ ํ ๋ฆฌ ๋ฐ์ ์น๊ตฌ๋ค์ ์ปดํ์ผ ํ๊ฒ ๋ค๋ ์๋ฏธ!
- "exclude": ["node_modules", "dist"]
- node_modules, dist ๋๋ ํ ๋ฆฌ ๋ฐ์ ์น๊ตฌ๋ค์ ์ปดํ์ผ ๋์์์ ์ ์ธํ๊ฒ ๋ค๋ ์๋ฏธ!
d.ts ํ์ผ
- .d.ts ํ์ผ์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ TypeScript ์ฝ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค!
- ์ด๋ฏธ ์์ฑ๋ ๋ค์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธํ์ฑ์ ์ ์งํ ์ ์์ด์ผ ํ๋ค!
- TypeScript๋ @types ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ์
์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค!
๊ทธ๋์ d.ts๋ ๋ญ์ผ?
.d.ts ํ์ผ์ TypeScript ํ์
์ ์ ํ์ผ์ด๋ค. ์ฆ, JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ์
์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค!
- .d.ts ํ์ผ๋ก TypeScript ์ปดํ์ผ๋ฌ๋ ๋ค์์ ์ ์ ์๋ค
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์ ํ์
์ ๋ณด
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค ํ์
์ ๋ณด
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฒด ํ์
์ ๋ณด
- ๋ฟ๋ง ์๋๋ผ, .d.ts ํ์ผ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์
์ถ๋ก ๋ ํ ์ ์๋ค.
-> ํ์
์ถ๋ก ์ด๋ ํ์
์ด ๋ช
์๊ฐ ๋์ง ์์์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ํด๋น ํ์
์ ๋ํด ์ถ๋ก ์ ํ๋ ๊ฒ
JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ TypeScript์์ ์ฐ๋ ค๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ .d.ts ํ์ผ๋ง ์ ๊ณต์ ํด์ฃผ๋ฉด ๋๋ค!
TypeScript ํ๋ก์ ํธ์์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ ์ค๋ ์์ ํ์ง ์๊ณ ๊ทธ๋๋ก ์ธ ์ ์์!