我正在寻找有关为我目前在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生成上述声明。但是,我们已经找到了解决此问题的方法。
以这种方式生成捆绑的声明,TS存储库上似乎有几个github问题,但它们似乎是长期存在的问题,下面将对此进行引用。
commonjs软件包的软件包声明文件-(似乎很完美) https://github.com/Microsoft/TypeScript/pull/3159
建议:捆绑TS模块类型定义 https://github.com/Microsoft/TypeScript/issues/4434
正在寻找有关将TypeScript库发布到NPM的npm声明的其他经验。公开所有建议!
非常感谢
答案 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
。