打字稿:编译环境模块声明以发布到 NPM



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

对于一些背景故事,我们的模块目前使用作用域 npm 模块发布,所以类似于"@company/模块"。因此,我们注意到的一件事是,为了使 Typescript 能够解析"作用域"模块,它需要一个完全限定的环境模块名称"@company/模块"声明,并且它是在生成命名环境模块时,实际上是从我们不确定的编译器生成环境模块声明的适当方法。

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

打字稿

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

// ./bar.ts
export class Bar {} 
// ./index.ts
import { Bar } from "./bar"
export class Foo {
   constructor(private bar: Bar) {}
}

打字稿声明

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

// ./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(发出声明包和"环境"声明(
  2. 重写
  3. 已编译的AMD声明,并使用"@company/模块"作为声明模块前缀(包括导入(

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

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

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

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

非常感谢

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

你不需要这样做(或者至少你没有提供它的用例(。

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

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

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

例子

  • 大量的TypeScript npm模块在那里。这是我的一个。
  • 节点JS快速入门

最新更新