如何通过TypeScript包bar中转导出依赖包foo的全部类型?
TypeScript 跨包批量导出依赖类型方案
最优解决方案:命名空间式批量导出类型
在bar包中使用TypeScript原生的批量类型导出语法,可完整同步foo的所有类型,无需手动维护导出列表:
bar 包实现
// pkg bar // 将foo的所有类型封装为FooMod命名空间导出 export type * as FooMod from 'foo'; // 若foo包含运行时变量/函数等非类型成员,需同步导出的话,添加以下行: // export * as FooMod from 'foo';
baz 包使用示例
// pkg baz import * as bar from 'bar'; const doStuffWithBar = (): bar.FooMod.Fooz => { return { x: 123 }; };
该方案核心优势:
- 自动同步
foo的更新,新增/修改的类型会自动通过bar暴露给baz - 语法简洁,无需手动逐个导出类型
- TypeScript 3.8及以上版本原生支持
备选方案:直接导出到bar顶层
如果不需要命名空间封装,可让foo的类型直接作为bar的顶层成员暴露:
// pkg bar // 导出所有类型 export type * from 'foo'; // 导出所有运行时成员(如果有) export * from 'foo';
此时baz可直接导入使用:
// pkg baz import { Fooz } from 'bar'; const doStuffWithBar = (): Fooz => { return { x: 123 }; };
为什么你之前的尝试失败?
export FooMod = typeof foo;:typeof foo获取的是模块运行时对象的类型,而TypeScript的接口/类型在编译时会被擦除,不会存在于模块对象中,因此无法获取到这些类型信息。export FooMod = import('foo'):这是错误语法,import('foo')是动态导入表达式,返回Promise对象,不能直接作为类型别名使用。
内容的提问来源于stack exchange,提问作者cdaringe
相关产品推荐
相关产品推荐

