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; }
我不确定该类型应放置在何处,目前有几种可选方案:
- 放在展示层 =>
image-gallery,供其他包导入 - 放在模型层 =>
client-store,供其他包导入 - 手动创建共享
common-types包 - 自动生成共享
common-types包(组合式)
无论选择哪种方案,都可能导致依赖图复杂化,使构建从并行变为串行。此外,并非所有类型都适合统一管理,有时希望类型贴近组件,有时又希望按语义上下文分组。我想知道是否存在未考虑到的解决路径?
内容的提问来源于stack exchange,提问作者Guy
相关产品推荐
相关产品推荐

