如何从单个打字稿文件中仅生成.d.ts?

Kev*_*eal 6 typescript

我想创建一个.d.ts单个文件.ts文件,而无需创建.js从我的源文件(S).ts文件(S).

我想运行类似的东西:

$ tsc myFile.ts -d
Run Code Online (Sandbox Code Playgroud)

但结果只是myFile.ts生成的.d.ts文件.

目前,其结果是,该文件和所有的的.ts在我的项目文件中自己制作.js.d.ts文件.

我的目标是es2015,所以模块选项应该默认为CommonJS(如果这很重要).

Sha*_*tin 9

我想为单个 .ts 文件创建单个 .d.ts 文件,而不从源 .ts 文件创建 .js 文件。

虽然没有编译器选项,但我们可以包含并删除生成的 .js 文件。

情况一:单个.ts文件,不导入本地.ts文件

我们能做的是

  1. 指定.为声明目录,
  2. 指定temp为 JavaScript 目录,并且
  3. 编译完成后删除该temp目录。

    tsc --declaration --declarationDir . --outDir temp foo.ts
    rm -rf temp
    
    Run Code Online (Sandbox Code Playgroud)

如果 foo.ts 不导入其他本地 .ts 文件,则该方法有效。当 foo.ts 导入其他本地 .ts 文件时,编译器会为每个文件创建一个单独的 .d.ts 文件。因为这不是我们现在想要的,所以接下来的更好。

案例 2:单个 .ts 文件导入本地 .ts 文件

如果我们的用例允许创建systemamd样式声明文件,我们可以这样做:

tsc foo.ts --outFile foo.js --declaration --module system
rm -rf foo.js
Run Code Online (Sandbox Code Playgroud)

两种情况的结果

这两种方法都会使用不同的声明文件语法生成相同的目录结构。

bar
  bar.ts
foo.d.ts           <---- a single declaration file
foo.ts
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

  • 如果将“--emitDeclarationOnly”添加到 tsc 命令,则在第二种情况下不需要“rm -rf”。 (3认同)

Nin*_*liu 8

自从上次接受的答案以来,TS 添加了对emitDeclarationOnly的支持,它就是这样做的

例子tsconfig.json

{
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "types",
    "emitDeclarationOnly": true
  },
  "include": ["src"]
}
Run Code Online (Sandbox Code Playgroud)

用法示例

npx tsc
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 !!!使用“vite”编写一个库,这件事让我松了一口气。否则,我就得用手写了。 (2认同)