Typescript:编译环境模块声明以发布到 NPM

Typescript: Compile ambient module declarations for publishing to NPM

我正在寻找建议,以自动为我目前正在用 TypeScript 编写的 npm 包提供 TypeScript 编译节点 (commonjs) 环境模块声明。在理解让 TypeScript 为 node / commonjs 生成环境模块声明的适当方法方面,我似乎 运行 遇到了一些问题。

对于一些背景故事,我们的模块目前是使用范围内的 npm 模块发布的,所以类似于“@company/module”。所以我们要注意的一件事是,为了让打字稿能够解析 "scoped" 模块,它需要一个完全限定的环境模块名称“@company/module”声明,并且它在命名的生成中环境模块,事实上,从我们不确定的编译器生成环境模块声明的适当方法。

我们的模块设置与以下示例不太相似。

TypeScript

以下代码分别编译为index.js和bar.js。

// ./bar.ts
export class Bar {} 

// ./index.ts
import { Bar } from "./bar"

export class Foo {
   constructor(private bar: Bar) {}
}

TypeScript 声明

以下是我们希望从打字稿编译器生成的理想化输出。

// ./index.d.ts

declare module "@company/module/bar" {
  export class Bar {}
}

declare module "@company/foo" {
  import { Bar } from "@company/module/bar"
  export class Foo {
    constructor(private bar: Bar)
  }
}

似乎没有一种简洁/明确的方法可以直接从 TypeScript 生成上述声明。但是,我们找到了解决此问题的方法。

  1. 使用模块单独编译声明:AMD - outFile(发出声明包和 "ambient" 声明)
  2. 用“@company/module”重写已编译的 AMD 声明和前缀声明模块(包括导入)

关于以这种方式生成捆绑声明,在 TS 存储库中似乎存在一些 github 问题,但它们似乎是长期存在的问题,这些在下面被引用。

commonjs 包的包声明文件 -(看起来很完美) https://github.com/Microsoft/TypeScript/pull/3159

提案:捆绑 TS 模块类型定义 https://github.com/Microsoft/TypeScript/issues/4434

正在寻找其他将 TypeScript 库的 npm 声明发布到 NPM 的经验。欢迎所有建议!

非常感谢

The following is the idealized output we would like to generate from the typescript compiler.

您不需要那样做(或者至少您没有为此提供用例)。

您的输出文件夹,例如/module/bar 应如下所示:

  • index.js < 为 /module/bar.ts
  • 生成了 .js
  • index.d.ts < 为 /module/bar.ts
  • 生成 .d.ts

并且当用户需要 @company/module/bar 时,runtime 解析为 .js 并且 TypeScript 类型系统自动解析为 .d.ts

例子