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

Monorepo中TypeScript共享类型引发循环依赖的替代方案问询

TypeScript共享类型的依赖困境与解决方案探索

TypeScript 3.8引入了import type语法,专门用于安全导入类型定义:

import type仅导入用于类型注解和声明的内容,在运行时会被完全擦除,不会留下任何痕迹。类似地,export type仅提供可用于类型上下文的导出,也会从TypeScript输出中被擦除。

但即便使用import type,仍需将对应包列为依赖项,这会引发循环依赖问题。我当前的Monorepo简化结构如下:

  • client-web:基于vite的Web客户端(客户端层)
  • client-store:Redux存储包(模型层)
  • image-gallery:图片展示包(展示层)

这三个包都需要使用同一个类型:

type IImage = {
     id: string;
     title: string;
     url: string;
     urlThumb: string;
}

我不确定该类型应放置在何处,目前有几种可选方案:

  1. 放在展示层 => image-gallery,供其他包导入
  2. 放在模型层 => client-store,供其他包导入
  3. 手动创建共享common-types包
  4. 自动生成共享common-types包(组合式)

无论选择哪种方案,都可能导致依赖图复杂化,使构建从并行变为串行。此外,并非所有类型都适合统一管理,有时希望类型贴近组件,有时又希望按语义上下文分组。我想知道是否存在未考虑到的解决路径?

内容的提问来源于stack exchange,提问作者Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:48:19