Skip to content

Latest commit

ย 

History

History
69 lines (49 loc) ยท 3.07 KB

File metadata and controls

69 lines (49 loc) ยท 3.07 KB
์ œ๋ชฉ 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

๊ฐ ๋‹จ๊ณ„๋Š” ํƒ€์ž…์‹œ์Šคํ…œ์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ์ˆ˜์ค€์— ๋งž๋Š” ๊ฒ€์ฆ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

JavaScript๋ฅผ ํ™œ์šฉํ•œ TypeScript (TypeScript with JavaScript)

์ด๋Š” ์ž๋™ ์™„์„ฑ, ์‹ฌ๋ฒŒ๋กœ ์ด๋™ ๋ฐ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์™€ ๊ฐ™์€ ๋ฆฌํŒฉํ† ๋ง ํˆด์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™ˆํŽ˜์ด์ง€์—๋Š” TypeScript ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด ์žˆ๋Š” ํŽธ์ง‘์ž ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.

JSDoc์„ ํ†ตํ•˜์—ฌ JS์— ํƒ€์ž… ํžŒํŠธ ์ œ๊ณตํ•˜๊ธฐ (Providing Type Hints in JS via JSDoc)

.js ํŒŒ์ผ์—์„œ๋Š”, ์ข…์ข… ํƒ€์ž…๋“ค์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž…๋“ค์„ ์œ ์ถ”ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, JSDoc ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JSDoc ์ฃผ์„์€ ์„ ์–ธ ์•ž์— ์œ„์น˜ํ•˜๋ฉฐ ํŠน์ • ์„ ์–ธ์˜ ํƒ€์ž…์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

/** @type {number} */
var x;

x = 0; // ์„ฑ๊ณต
x = false; // ์„ฑ๊ณต?!

์ง€์›๋˜๋Š” JSDoc ํŒจํ„ด์˜ ์ „์ฒด ๋ชฉ๋ก์€ JSDoc๊ฐ€ ์ง€์›ํ•˜๋Š” ํƒ€์ž…์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ts-check

์ด์ „ ์ฝ”๋“œ ์˜ˆ์‹œ์˜ ๋งˆ์ง€๋ง‰ ์ค„์€ 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๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.