繁体   English   中英

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

[英]Typescript: Compile ambient module declarations for publishing to NPM

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

对于某些背景资料,我们的模块当前是使用作用域npm模块发布的,因此类似“ @ company / module”。 因此,我们要注意的一件事是,为了使打字稿能够解析“作用域”模块,它需要一个完全限定的环境模块名称“ @ company / module”声明,并且它是在命名环境模块的生成上进行的,并且实际上,我们不确定从编译器生成环境模块声明的适当方法。

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

打字稿

以下代码分别编译为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的其他经验。 欢迎所有建议!

非常感谢

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

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

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

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

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

例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM