我正在寻找建议,以便为我目前正在用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 生成上述声明。但是,我们已经找到了一种解决此问题的方法。
- 使用模块单独编译声明:AMD - outFile(发出声明包和"环境"声明( 重写
- 已编译的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
>为CC_4生成CC_3> -
index.d.ts
<为/module/bar.ts
生成.d.ts
>为CC_7生成CC_6>
当用户需要运行时解析为.js
@company/module/bar
并且 TypeScript 类型系统会自动解析为.d.ts
时。
例子
- 大量的TypeScript npm模块在那里。这是我的一个。
- 节点JS快速入门