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

TypeScript中如何基于联合类型自动生成对应转换类型?

解决方案

纯 TypeScript 类型系统无法自动生成独立的顶级类型别名,不过有两种成熟的方案可以达到避免手动重复编写的目的。

方案一:使用映射类型(无需额外工具,推荐)

你可以先把所有基础类型收拢到一个结构化的映射表里,后续所有衍生类型都从这个表推导,只需要维护这一个入口:

// 1. 统一维护所有基础类型的映射,新增类型只需要修改此处
type TypeMap = {
  A: A,
  B: B,
  C: C
}

// 2. MyTypes 直接从映射表推导,不用手动拼接联合类型
type MyTypes = TypeMap[keyof TypeMap]

// 3. 批量生成转换后的类型映射
type TransformedMap = {
  [K in keyof TypeMap as `${K}Trans`]: Transformed<TypeMap[K]>
}

使用的时候直接从映射表取值即可:

// 等价于你原本定义的 ATrans
type ATrans = TransformedMap['ATrans']
// 等价于你原本定义的 BTrans
type BTrans = TransformedMap['BTrans']

如果确实需要单独导出每个类型,也只需要写一次上述的别名声明,后续新增类型时映射表会自动包含新的转换类型,不会遗漏。

方案二:代码生成(需要额外工具链)

如果一定要完全自动生成独立的顶级类型声明,可以写一个简单的 Node 脚本:

  • 扫描你的类型定义文件,解析 TypeMap 或者 MyTypes 的成员
  • 自动生成对应 XTrans = Transformed<X> 的类型声明,写入指定的 .d.ts 文件
  • 把脚本配置到 Git Hooks 或者构建流程中,每次类型改动时自动执行即可
    这种方案不需要修改使用侧的代码,但是需要维护额外的工具链逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:45:03