| ์ ๋ชฉ | TypeScript๋ฅผ ํ์ฉํ JS ํ๋ก์ ํธ(JS Projects Utilizing TypeScript) |
|---|---|
| ๋ ์ด์์ | ๋ฌธ์ |
| ๊ณ ์ ๋งํฌ | /docs/handbook/intro-to-js-ts.html |
| ํ ์ค ์ค๋ช | TypeScript๋ฅผ ์ฌ์ฉํ์ฌ JavaScript ํ์ผ์ ์ ํ ํ์ธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ |
TypeScript์ ํ์ ์์คํ ์ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ ํ ๋ ์๊ฒฉํจ์ ๋ ๋ฒจ์ด ๋ค๋ฆ ๋๋ค
- ์ค์ง JavaScript ์ฝ๋์ ์ถ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ์ ์์คํ
- JSDoc๋ฅผ ํตํ JavaScript์์์ Incremental typing
- JavaScript์์์
// @ts-check์ฌ์ฉ - TypeScript ์ฝ๋
strict์ด ํ์ฑํ๋ TypeScript
๊ฐ ๋จ๊ณ๋ ํ์ ์์คํ ์ ๋ ์์ ํ๊ฒ ๋ง๋ค์ง๋ง, ๋ฐ๋์ ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์ด ์์ค์ ๋ง๋ ๊ฒ์ฆ์ ํ์๋ก ํ๋ ๊ฒ์ ์๋๋๋ค.
์ด๋ ์๋ ์์ฑ, ์ฌ๋ฒ๋ก ์ด๋ ๋ฐ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ์ ๊ฐ์ ๋ฆฌํฉํ ๋ง ํด์ ์ ๊ณตํ๊ธฐ ์ํด์ TypeScript๋ฅผ ์ฌ์ฉํ๋ ์๋ํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฉํฉ๋๋ค. ํํ์ด์ง์๋ TypeScript ํ๋ฌ๊ทธ์ธ๋ค์ด ์๋ ํธ์ง์ ๋ชฉ๋ก์ด ์์ต๋๋ค.
.js ํ์ผ์์๋, ์ข
์ข
ํ์
๋ค์ ์ ์ถํ ์ ์์ต๋๋ค. ํ์
๋ค์ ์ ์ถํ ์ ์๋ ๊ฒฝ์ฐ, JSDoc ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฒด์ ์ผ๋ก ์๋ฆด ์ ์์ต๋๋ค.
JSDoc ์ฃผ์์ ์ ์ธ ์์ ์์นํ๋ฉฐ ํน์ ์ ์ธ์ ํ์ ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด:
/** @type {number} */
var x;
x = 0; // ์ฑ๊ณต
x = false; // ์ฑ๊ณต?!์ง์๋๋ JSDoc ํจํด์ ์ ์ฒด ๋ชฉ๋ก์ JSDoc๊ฐ ์ง์ํ๋ ํ์ ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด์ ์ฝ๋ ์์์ ๋ง์ง๋ง ์ค์ TypeScript์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง๋ง, JS ํ๋ก์ ํธ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค.
JavaScript ํ์ผ์์ ์ค๋ฅ๋ฅผ ์คํํ๋ ค๋ฉด ๋ค์์ ์ถ๊ฐํด์ผ ํฉ๋๋ค: .js ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ค์ // @ts-check๋ฅผ ์ถ๊ฐํ์ฌ TypeScript๊ฐ ์ด๋ฅผ ์ค๋ฅ๋ก ์ฌ๋ฆฌ๋๋ก ํด์ผ ํฉ๋๋ค.
// @ts-check
// @errors: 2322
/** @type {number} */
var x;
x = 0; // ์ฑ๊ณต
x = false; // ์ฑ๊ณต ์๋๋ง์ผ ์ค๋ฅ๋ฅผ ์ถ๊ฐํ๋ ค๋ JavaScript ํ์ผ์ด ๋ง์ ๊ฒฝ์ฐ, jsconfig.json ์ญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ผ์ // @ts-nocheck ์ฝ๋ฉํธ๋ฅผ ์ถ๊ฐํ๋ฉด ์ผ๋ถ ํ์ผ ํ์ธ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
TypeScript๋ ์ฐ๋ฆฌ๊ฐ ๋์ํ์ง ์๋ ์ค๋ฅ๋ค์ ์ ๊ณตํ ์๋ ์๋๋ฐ, ์ด ๊ฒฝ์ฐ ํน์ ์ค ๋งจ์์ // @ts-ignore ๋๋ // @ts-expect-error๋ฅผ ์ถ๊ฐํ์ฌ ๊ทธ ์ค์ ์ค๋ฅ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค.
// @ts-check
/** @type {number} */
var x;
x = 0; // ์ฑ๊ณต
// @ts-expect-error
x = false; // ์ฑ๊ณต ์๋JavaScript๋ฅผ TypeScript๋ก ํด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ TS Type์ด JS๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.