Typescript:编译环境模块声明以发布到 NPM
Typescript: Compile ambient module declarations for publishing to NPM
我正在寻找建议,以自动为我目前正在用 TypeScript 编写的 npm 包提供 TypeScript 编译节点 (commonjs) 环境模块声明。在理解让 TypeScript 为 node / commonjs 生成环境模块声明的适当方法方面,我似乎 运行 遇到了一些问题。
对于一些背景故事,我们的模块目前是使用范围内的 npm 模块发布的,所以类似于“@company/module”。所以我们要注意的一件事是,为了让打字稿能够解析 "scoped" 模块,它需要一个完全限定的环境模块名称“@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 生成上述声明。但是,我们找到了解决此问题的方法。
- 使用模块单独编译声明:AMD - outFile(发出声明包和 "ambient" 声明)
- 用“@company/module”重写已编译的 AMD 声明和前缀声明模块(包括导入)
关于以这种方式生成捆绑声明,在 TS 存储库中似乎存在一些 github 问题,但它们似乎是长期存在的问题,这些在下面被引用。
commonjs 包的包声明文件 -(看起来很完美)
https://github.com/Microsoft/TypeScript/pull/3159
提案:捆绑 TS 模块类型定义
https://github.com/Microsoft/TypeScript/issues/4434
正在寻找其他将 TypeScript 库的 npm 声明发布到 NPM 的经验。欢迎所有建议!
非常感谢
The following is the idealized output we would like to generate from the typescript compiler.
您不需要那样做(或者至少您没有为此提供用例)。
您的输出文件夹,例如/module/bar
应如下所示:
index.js
< 为 /module/bar.ts
生成了 .js
index.d.ts
< 为 /module/bar.ts
生成 .d.ts
并且当用户需要 @company/module/bar
时,runtime 解析为 .js
并且 TypeScript 类型系统自动解析为 .d.ts
。
例子
- 那里有大量的 TypeScript npm 模块。这里是 one of mine.
- NodeJS quickstart
我正在寻找建议,以自动为我目前正在用 TypeScript 编写的 npm 包提供 TypeScript 编译节点 (commonjs) 环境模块声明。在理解让 TypeScript 为 node / commonjs 生成环境模块声明的适当方法方面,我似乎 运行 遇到了一些问题。
对于一些背景故事,我们的模块目前是使用范围内的 npm 模块发布的,所以类似于“@company/module”。所以我们要注意的一件事是,为了让打字稿能够解析 "scoped" 模块,它需要一个完全限定的环境模块名称“@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 生成上述声明。但是,我们找到了解决此问题的方法。
- 使用模块单独编译声明:AMD - outFile(发出声明包和 "ambient" 声明)
- 用“@company/module”重写已编译的 AMD 声明和前缀声明模块(包括导入)
关于以这种方式生成捆绑声明,在 TS 存储库中似乎存在一些 github 问题,但它们似乎是长期存在的问题,这些在下面被引用。
commonjs 包的包声明文件 -(看起来很完美) https://github.com/Microsoft/TypeScript/pull/3159
提案:捆绑 TS 模块类型定义 https://github.com/Microsoft/TypeScript/issues/4434
正在寻找其他将 TypeScript 库的 npm 声明发布到 NPM 的经验。欢迎所有建议!
非常感谢
The following is the idealized output we would like to generate from the typescript compiler.
您不需要那样做(或者至少您没有为此提供用例)。
您的输出文件夹,例如/module/bar
应如下所示:
index.js
< 为/module/bar.ts
生成了 index.d.ts
< 为/module/bar.ts
生成
.js
.d.ts
并且当用户需要 @company/module/bar
时,runtime 解析为 .js
并且 TypeScript 类型系统自动解析为 .d.ts
。
例子
- 那里有大量的 TypeScript npm 模块。这里是 one of mine.
- NodeJS quickstart