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

如何在TypeScript中合并简化复杂交叉类型为单一对象类型?

交叉对象类型合并方案

可行,这种操作在TypeScript里称为交叉类型扁平化或类型简化,可以通过工具类型实现。

通用实现:Simplify工具类型

定义一个工具类型,将交叉对象类型合并为单一对象:

type Simplify<T> = { [K in keyof T]: T[K] }

原理是通过映射类型遍历交叉类型的所有属性,重新整合为一个新对象,TypeScript会自动处理属性合并与可选性标记。

将其应用到你的Result类型:

type Result<S extends Schema> = Simplify<Mandatory<S> & Optional<S>>

更优写法:直接生成合并类型

也可以跳过拆分交叉的步骤,直接在映射类型中处理必填/可选属性,一步得到目标类型:

type Result<S extends Schema> = {
  [P in keyof S]: S[P]["v"]
} & {
  [P in keyof S as S[P]["required"] extends false ? P : never]?: never
} extends infer O ? { [K in keyof O]: O[K] } : never

不过通用Simplify工具类型更易读,且能适配多部分交叉的复杂场景。

效果验证

针对你的userSchema,处理后的Result<S>会直接变为:

{
  id: string;
  email: string;
  name: string;
  thumbnail?: string;
}

完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:52:33