JS ์ฝ๋์ TS๋ฅผ ์ ์ฉํ ๋ ์ฃผ์ํ ์
- ๊ธฐ๋ฅ์ ์ธ ๋ณ๊ฒฝ์ ์ ๋ X
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋ฎ์ ๋ ํจ๋ถ๋ก ts ์ ์ฉํ์ง ๋ง ๊ฒ
- ์ ์ง์ ์ผ๋ก strict ๋ ๋ฒจ์ ์ฆ๊ฐ์ํฌ ๊ฒ (์ฒ์๋ถํฐ ์๊ฒฉํ๊ฒ ํ์ ์ ์ฉ x)
TS๋ฅผ ์ ์ง์ ์ผ๋ก ์ ์ฉํ๋ ๋ฐฉ๋ฒ
( 0. ์์ JS : JSDoc์ ์ด์ฉํด ์์ JS ์ฝ๋์ ํํธ๋ฅผ ์ ๊ณตํ๊ธฐ )
- ts ํ๊ฒฝ ์ค์ ๋ฐ .ts ํ์ผ๋ก ๋ณํ
- any ํ์ ์ ์ธ
- any ํ์ ์ ๋ ์ ์ ํ ํ์ ์ผ๋ก ๋ณ๊ฒฝ
1. typescript ํ๋ก์ ํธ ํ๊ฒฝ ๊ตฌ์ฑ
- ํ๋ก์ ํธ ์์ฑ ํ
npm init -y๋ก package.json ์์ฑ npm i typescript -D๋ก ํ์ ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ- ํ์
์คํฌ๋ฆฝํธ ์ค์ ํ์ผ tsconfig.json์ ์์ฑํ๊ณ ๊ธฐ๋ณธ๊ฐ ์ถ๊ฐํ๊ธฐ
1 2 3 4 5 6 7 8 9 10 11
{ "compilerOptions": { "allowJs": true, "target": "ES5", "outDir": "./dist", "moduleResolution": "Node", "lib": ["ES2015", "DOM", "DOM.Iterable"] }, "include": ["./src/**/*"], "exclude": ["node_modules", "dist"] }
- ์๋น์ค ์ฝ๋๊ฐ ํฌํจ๋ .js โ .ts ๋ก ๋ณํ (app.js โ app.ts)
- ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ๋ช ๋ ์ด tsc ๋ก ํ์ ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ณํํ๊ธฐ
2. ์๊ฒฉํ์ง ์์ ํ์ ํ๊ฒฝ(loose type)์์ ํ๋ก์ ํธ ๋๋ ค๋ณด๊ธฐ
- ํ ์คํธ ์ฝ๋๊ฐ ์๋ค๋ฉด ํ ์คํธ ์ฝ๋๊ฐ ํต๊ณผํ๋์ง ๋จผ์ ํ์ธ
- ๋ชจ๋ js ํ์ผ โ ts ํ์ผ
- ์ปดํ์ผ ์๋ฌ ๋๋ ๊ฒ๋ค ์์ฃผ๋ก๋ง ์๋ฌ ์ก๊ธฐ (์ฌ๊ธฐ์ ๊ธฐ๋ฅ์ ์ฌ์ํ๊ฒ๋ผ๋ ๋ณ๊ฒฝํ์ง ์๋๋ก ์ฃผ์)
- ํ ์คํธ ์ฝ๋๊ฐ ์ฑ๊ณตํ๋์ง ํ์ธ
3. ๋ช ์์ ์ธ any ์ ์ธํ๊ธฐ
- ํ์
์คํฌ๋ฆฝํธ ์ค์ ํ์ผ์
noImplicitAny: true์ถ๊ฐํ๊ธฐ - ๊ฐ๋ฅํ ํ์
์ ์ ์ฉํ ์ ์๋ ๋ชจ๋ ๊ณณ์ ํ์
์ ์ ์ฉํ๊ธฐ
- library๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ DefinitelyTyped์์
@types๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ค์นํ๋ค.
- library๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ DefinitelyTyped์์
- ํ์
์ ์ ํ๊ธฐ ์ด๋ ค์ด ๊ณณ์ด ์์ผ๋ฉด ๋ช
์์ ์ผ๋ก๋ผ๋
any์ ์ธํ๊ธฐ
4. strict ๋ชจ๋ ์ค์ ํ๊ธฐ
- ํ์ ์คํฌ๋ฆฝํธ ์ค์ ํ์ผ์ ์๋ ์ค์ ์ ์ถ๊ฐํ๋ค
1
2
3
4
5
6
7
8
9
{
"strict": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
}
any๋ก ๋์ด์๋ ํ์ ์ ์ต๋ํ ๋ ์ ์ ํ ํ์ ์ผ๋ก ๋ณํas์ ๊ฐ์ ํค์๋๋ฅผ ์ต๋ํ ์ฌ์ฉํ์ง ์๋๋ก ๊ณ ๋ฏผํด์ ๋ณ๊ฒฝํ๋ค
Q.
- ํ ์คํธ์ฝ๋ ์์ฑ