๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Language/TypeScript

[TypeScript] Declaration File & JSDoc

 

Declaration File

  • TypeScript ์„ ์–ธ ํŒŒ์ผ์€ ์ฃผ๋กœ JavaScript๋กœ ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์„ TypeScript์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ ์–ธ ํŒŒ์ผ์€ .d.ts ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์˜ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Visual Studio Code์™€ ๊ฐ™์€ ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ(IDE)์—์„œ๋Š” ์„ ์–ธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript๋Š” JavaScript ์ฝ”๋“œ๋„ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€๋งŒ, ํƒ€์ž… ์ •์˜๊ฐ€ ์—†๋‹ค๋ฉด ์‚ฌ์‹ค TypeScript๋ฅผ ์“ฐ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TypeScript์—์„œ ์„ ์–ธ ํŒŒ์ผ์€ ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • tsconfig.json์— "strict": true ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์„ ์–ธ ํŒŒ์ผ์ด ์—†๋Š” JavaScript ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ปดํŒŒ์ผ๋„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋•Œ {ํŒจํ‚ค์ง€๋ช…}.d.ts ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
// index.ts
import { exit, init } from "myPackage";

init({ url: "x" });
exit(1);
// myPackage.js
export function init(config) {
  return true;
}

export function exit(code) {
  return code + 1;
}
// myPackage.d.ts
interface Config {
  url: string;
}
declare module "myPackage" {
  function init(config: Config): boolean;
  function exit(code: number): number;
}

 

JSDoc

  • ์‚ฌ์‹ค ์˜คํ”ˆ ์†Œ์Šค์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด์ƒ ์ง์ ‘ ์„ ์–ธ ํŒŒ์ผ์„ ์ž‘์„ฑํ•  ์ผ์€ ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค...
  • TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด, ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ JavaScript ํŒŒ์ผ๊ณผ TypeScript ํŒŒ์ผ์ด ํ•จ๊ป˜ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž… ์„ ์–ธ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , TypeScript์™€ JavaScript๋ฅผ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์—†์„๊นŒ์š”?

 

1. tsconfig.json ํŒŒ์ผ์— "allowJs": true ์˜ต์…˜ ์ถ”๊ฐ€

{
  "include": ["src"],
  "compilerOptions": {
    "outDir": "build",
    "target": "ES6",
    "strict": true,
    "allowJs": true
  }
}

 

2. JSDoc ์ž‘์„ฑ

  • JavaScript ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ TypeScript๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ณดํ˜ธ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด JSDoc์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • ์ˆœ์ˆ˜ํ•œ JavaScript ์ฝ”๋“œ ์•ˆ์—์„œ @ts-check๋ฅผ ์ฃผ์„์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด TypeScript์ฒ˜๋Ÿผ ํƒ€์ž… ๋ฐ ์—๋Ÿฌ ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ ๋‹ค์Œ JSDoc ํ˜•์‹์˜ ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์„œ๋น„์Šค ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋‹น์žฅ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฑฑ์ •์€ ํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
// @ts-check
/**
 * Initialize the project
 * @param {object} config
 * @param {string} config.url
 * @returns {boolean}
 */
export function init(config) {
  return true;
}

/**
 * Exits then program
 * @param {number} code
 * @returns {number}
 */
export function exit(code) {
  return code + 1;
}

 

์ฐธ๊ณ