Skip to content

Latest commit

Β 

History

History
87 lines (65 loc) Β· 3.86 KB

File metadata and controls

87 lines (65 loc) Β· 3.86 KB
title Creating .d.ts Files from .js files
layout docs
permalink /docs/handbook/declaration-files/dts-from-js.html
oneline How to add d.ts generation to JavaScript projects

TypeScript 3.7μ—μ„œ, TypeScriptλŠ” JSDoc ꡬ문을 μ‚¬μš©ν•œ JavaScriptμ—μ„œ .d.ts νŒŒμΌμ„ 생성할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

즉 ν”„λ‘œμ νŠΈλ₯Ό TypeScript에 μ΄μ‹ν•˜κ±°λ‚˜(porting) μ½”λ“œλ² μ΄μŠ€μ— .d.ts νŒŒμΌμ„ μœ μ§€ν•˜μ§€ μ•Šκ³ λ„ TypeScript 기반 νŽΈμ§‘κΈ°μ˜ ν™˜κ²½μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. TypeScriptλŠ” λŒ€λΆ€λΆ„μ˜ JSDoc νƒœκ·Έλ₯Ό μ§€μ›ν•˜λ©°, μ°Έμ‘°μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

.d.ts 파일 생성을 μœ„ν•œ ν”„λ‘œμ νŠΈ μ„€μ • (Setting up your Project to emit .d.ts files)

.d.ts νŒŒμΌμ„ ν”„λ‘œμ νŠΈμ—μ„œ μƒμ„±ν•˜λ €λ©΄, λ‹€μŒκ³Ό 같은 4단계λ₯Ό κ±°μ³μ•Όν•©λ‹ˆλ‹€:

  • 개발 μ˜μ‘΄μ„±μ— TypeScript μΆ”κ°€
  • TypeScript 섀정을 μœ„ν•΄ tsconfig.json μΆ”κ°€
  • JS νŒŒμΌμ— ν•΄λ‹Ήν•˜λŠ” d.ts νŒŒμΌμ„ μƒμ„±ν•˜κΈ° μœ„ν•΄ TypeScript 컴파일 μ‹€ν–‰
  • (μ„ νƒμ μœΌλ‘œ) νƒ€μž…μ„ μ°Έμ‘°ν•˜κΈ° μœ„ν•œ package.json μˆ˜μ •

TypeScript μΆ”κ°€ (Adding TypeScript)

μ„€μΉ˜ νŽ˜μ΄μ§€μ—μ„œ 방법을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

TSConfig

TSConfigλŠ” 컴파일러 ν”Œλž˜κ·Έλ₯Ό κ΅¬μ„±ν•˜κ³  νŒŒμΌμ„ 찾을 μœ„μΉ˜λ₯Ό μ„ μ–Έν•˜λŠ” json5 νŒŒμΌμž…λ‹ˆλ‹€. μœ„μ™€ 같은 경우, λ‹€μŒκ³Ό 같은 파일이 ν•„μš”ν•©λ‹ˆλ‹€:

{
  // ν”„λ‘œμ νŠΈμ— μ•Œλ§žκ²Œ μˆ˜μ •ν•˜μ„Έμš”.
  include: ["src/**/*"],

  compilerOptions: {
    // 일반적으둜 μ†ŒμŠ€ 파일둜 λ¬΄μ‹œλ˜κΈ° λ•Œλ¬Έμ—,
    // TypeScriptκ°€ JS νŒŒμΌοΏ½μ„ 읽도둝 μ§€μ‹œν•©λ‹ˆλ‹€.
    allowJs: true,
    // d.ts νŒŒμΌμ„ μƒμ„±μ‹œν‚΅λ‹ˆλ‹€.
    declaration: true,
    // 컴파일러 싀행이 였직
    // d.ts 파일만 좜λ ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
    emitDeclarationOnly: true,
    // νƒ€μž…μ€ 이 디렉터리 μ•ˆμ— μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    // ν•΄λ‹Ή 섀정을 μ œκ±°ν•˜λ©΄,
    // .d.ts 파일이 .js 파일 μ˜†μ— μƒμ„±λ©λ‹ˆλ‹€.
    outDir: "dist",
  },
}

tsconfig μ°Έμ‘°μ—μ„œ 더 λ§Žμ€ μ˜΅μ…˜μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. TSConfig νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” λŒ€μ‹  CLIλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

npx typescript src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types

컴파일러 μ‹€ν–‰ (Run the compiler)

μ„€μΉ˜ νŽ˜μ΄μ§€μ—μ„œ 방법을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ .gitignore에 파일이 μžˆμ„ λ•Œ, μ΄λŸ¬ν•œ νŒŒμΌλ“€μ΄ νŒ¨ν‚€μ§€μ— ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

package.json μˆ˜μ • (Editing the package.json)

TypeScriptλŠ” .d.ts νŒŒμΌμ„ μ°ΎκΈ° μœ„ν•œ μΆ”κ°€ 단계와 ν•¨κ»˜ package.json의 λͺ¨λ“ˆμ— λŒ€ν•œ λ…Έλ“œ 관계(node resolution)λ₯Ό λ³΅μ œν•©λ‹ˆλ‹€. λŒ€λž΅μ μœΌλ‘œ λ¨Όμ € 선택적인 "types" ν•„λ“œλ₯Ό 확인 ν›„, λ‹€μŒμ€ "main", λ§ˆμ§€λ§‰μœΌλ‘œ λ£¨νŠΈμ—μ„œ index.d.tsλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

Package.json κΈ°λ³Έ .d.ts의 μœ„μΉ˜
"types" ν•„λ“œ μ—†μŒ "main" 확인 ν›„, index.d.ts 확인
"types": "main.d.ts" main.d.ts
"types": "./dist/main.js" ./main/main.d.ts

type ν•„λ“œκ°€ μ—†λ‹€λ©΄, "main"으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€.

Package.json κΈ°λ³Έ .d.ts의 μœ„μΉ˜
"main" ν•„λ“œ μ—†μŒ index.d.ts
"main":"index.js" index.d.ts
"main":"./dist/index.js" ./dist/index.d.ts

팁 (Tips)

.d.ts의 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  μ‹Άλ‹€λ©΄, tsdλ₯Ό μ‚¬μš©ν•΄λ³΄μ„Έμš”.