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

时间:2018-08-08 02:51:01

标签: typescript npm publishing commonjs typescript-declarations

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

对于某些背景资料,我们的模块当前是使用作用域npm模块发布的,因此类似“ @ company / module”。因此,我们要注意的一件事是,为了使打字稿能够解析“作用域”模块,它需要一个完全限定的环境模块名称“ @ 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(发出声明包和“环境”声明)
  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声明的其他经验。公开所有建议!

非常感谢

1 个答案:

答案 0 :(得分:0)

  

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

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

您的输出文件夹,例如/module/bar应该看起来像:

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

当用户需要@company/module/bar时,运行时解析为.js,而TypeScript类型系统则自动解析为.d.ts

示例