You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:44:52