如何在 TypeScript npm 模块中导出类型

Posted

技术标签:

【中文标题】如何在 TypeScript npm 模块中导出类型【英文标题】:How to export types in a TypeScript npm module 【发布时间】:2020-06-27 22:34:15 【问题描述】:

在 TypeScript 中,假设我想让用户使用我的模块的“内部”类型,以便他们在使用我的模块时可以正确键入自己的变量 - 我是否只是从 index.ts 文件中导出所有内容来完成此操作?

// index.ts

export * from './file1' // uses types/interfaces defined in file1types
export * from './file2' // uses types/interfaces defined in file2types
export * from './types/file1types'
export * from './types/file2types'

.d.ts 文件是否可以帮助我完成此任务,或者它们仅适用于非 TS 项目? tsconfig.json 的选项 declaration: true 是否通过为每个 TS 文件生成 .d.ts 来帮助我完成此任务?这是从单个 index.ts 文件导出所有内容的替代方法吗?

如果declaration: true 确实帮助我完成了这项工作,那么用户将如何使用build 文件夹中生成的所有.d.ts 文件?

我将非常感谢您对 TS 项目中通常如何导出类型的一些说明。提前致谢。

【问题讨论】:

我不确定我是否理解这个问题,如果你想导出一个类型供 API 的用户使用,只需导出它...... 在你的 package.json 文件中,你需要在你的 typescript 文件 "declaration": true"declarationDir": "./types" 中提供 .d.ts 入口文件 "types": "types/index.d.ts" 的位置 【参考方案1】:

无需声明文件,您就可以在 TypeScript 中开发一个包,对其进行编译并将其作为 javascript 代码公开给其他用户。包含它们还允许 TypeScript 开发人员将包与您在其中定义的任何类型一起使用。他们可以在使用您的库时获取更多类型信息,例如所需的参数类型、函数返回类型等,以及在发生冲突时来自他们的 IDE/Intellisense 的警告。

文件 tsconfig.json 中的 declaration: true 指示 TypeScript 编译器输出声明文件 (.d.ts)。它们通常捆绑在一个文件中,例如index.d.ts,然后将 "types": path/to/index.d.ts 字段添加到库的 package.json 文件中,以通知 TypeScript 在哪里查找类型(当用户导入包时)。

【讨论】:

【参考方案2】:

对于像我这样的人,并确保在您的tsconfig.json 中设置了declaration: true,并且您的构建过程正确地将相应的.d.ts 文件创建到您的package.json 文件指向的相应目录中, 而且在测试外部项目时仍然无法访问模块的内部类型——尝试在 VSCode 中重新启动 TS 服务器(假设您使用的是 VSCode)

花了很多时间试图弄清楚这一点,结果却发现 Typescript 运行良好,而我的 IDE 正在破坏我。

【讨论】:

我不敢相信这有效... WebStorm 也是如此,顺便说一句。我会定期重新启动 Typescript 以查看它应有的运行方式。【参考方案3】:

这是我最近遇到的同样问题的答案:

https://***.com/a/64414544/10763156

基本上我发现的唯一方法是导出namespace 中的所有内容。 无需担心声明文件。我只使用"declaration":"true"

【讨论】:

命名空间不鼓励使用 es6 模块 iirc

以上是关于如何在 TypeScript npm 模块中导出类型的主要内容,如果未能解决你的问题,请参考以下文章

在 TypeScript 中导入没有作用域名称的作用域 npm 模块

如何从 typescript 项目中导入 npm 包?

从 NPM 包中导出多个模块

如何在 TypeScript 中为 css 模块设置汇总

如何在 ES6 项目中导入我的 npm 模块?

NPM 包未在 Angular 生产应用程序中导入