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

29
在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'
< p>我是否可以使用.d.ts文件来实现这一点,或者它们仅适用于非TS项目?tsconfig.json的选项declaration:true是否通过为每个TS文件生成一个.d.ts帮助我实现这一点?这是将所有内容从单个index.ts文件中导出的替代方法吗?

如果declaration:true可以帮助我实现这一点,用户将如何在build文件夹中使用所有那些生成的.d.ts文件?

我非常感谢有关如何在TS项目中通常导出类型的澄清。提前致谢。


我不确定我理解这个问题,如果你想为你的API的用户导出一个类型,只需导出它即可... - Jared Smith
1
在您的 package.json 文件中,您需要提供 .d.ts 入口文件的位置 { "types": "types/index.d.ts" },并在您的 TypeScript 文件中添加 "declaration": true"declarationDir": "./types" - Get Off My Lawn
2个回答

20

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

输入图像描述 here

浪费了很多时间来尝试解决这个问题,结果发现 TypeScript 运行得很好,而是我的 IDE 在阻挠我。


1
我简直不敢相信这个能行... - Stan Idesis
1
顺便说一下,WebStorm也是如此。我经常重启Typescript来确保其按照应有的方式运行。 - Yoav Moran
@YoavMoran,谢谢你的提示。我现在看到Webstorm中有一个“重新启动TypeScript服务”的命令了。当TS出问题时我之前一直是重启整个IDE。 - jdunning
提示:在Webstorm的状态栏中,单击TypeScript 4.X.X的右下角,然后从那里重新启动。 - Jason Landbridge
错误在枚举工作了几个提交后随机出现,但使用这种方法后问题消失了。 - Yyyeey

17
没有声明文件,你可以在TypeScript中开发包,将其编译并公开为JavaScript代码。 包含它们还允许TypeScript开发人员使用您在其中定义的任何类型的包。 他们可以在使用您的库时获得更多类型信息,例如所需参数类型、函数返回类型等,以及在IDE / Intellisense中存在冲突时的警告。
文件tsconfig.json中的declaration:true指示TypeScript编译器输出声明文件(.d.ts)。它们经常被捆绑在一个单一的文件中,例如index.d.ts,然后将"types": path/to/index.d.ts字段添加到库的package.json文件中,以通知TypeScript在哪里查找类型(当用户导入包时)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接