| 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 νμΌμ νλ‘μ νΈμμ μμ±νλ €λ©΄, λ€μκ³Ό κ°μ 4λ¨κ³λ₯Ό κ±°μ³μΌν©λλ€:
- κ°λ° μμ‘΄μ±μ TypeScript μΆκ°
- TypeScript μ€μ μ μν΄
tsconfig.jsonμΆκ° - JS νμΌμ ν΄λΉνλ d.ts νμΌμ μμ±νκΈ° μν΄ TypeScript μ»΄νμΌ μ€ν
- (μ νμ μΌλ‘) νμ μ μ°Έμ‘°νκΈ° μν package.json μμ
μ€μΉ νμ΄μ§μμ λ°©λ²μ νμΈν μ μμ΅λλ€.
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μ€μΉ νμ΄μ§μμ λ°©λ²μ νμΈν μ μμ΅λλ€.
νλ‘μ νΈμ .gitignoreμ νμΌμ΄ μμ λ, μ΄λ¬ν νμΌλ€μ΄ ν¨ν€μ§μ ν¬ν¨λμ΄ μλμ§ νμΈν©λλ€.
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 |
.d.tsμ ν μ€νΈλ₯Ό μμ±νκ³ μΆλ€λ©΄, tsdλ₯Ό μ¬μ©ν΄λ³΄μΈμ.