如何在 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 模块中导出类型的主要内容,如果未能解决你的问题,请参考以下文章