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

如何修改TypeScript嵌套条件映射类型让类型提示完全展开

解决方案

你可以通过调整递归逻辑的位置,强制TypeScript展开每一层的类型结构,修改后的BooleanResult定义如下:

type BooleanResult<T> = T extends object
  ? { [K in keyof T]: BooleanResult<T[K]> }
  : boolean[]

验证效果

代入你给出的业务类型计算后,得到的Result类型会完全展开,符合预期:

// 计算后Result类型为:
type Result = {
    companyName: boolean[];
    contactPerson: {
        firstName: boolean[];
        lastName: boolean[];
        email: boolean[];
    };
}

原理说明

你原来的写法中,属性值的条件类型返回的是未计算的BooleanResult<T[K]>泛型表达式,TypeScript默认会惰性计算这类嵌套泛型,展示时会保留泛型名称而不展开内部结构。
修改后的写法将判断逻辑提升到泛型顶层,每一层递归都会直接返回一个映射对象类型,TypeScript会主动计算并展开所有层级的属性结构,不会保留BooleanResult的包装标识。

可选的轻量修改方案

如果你不想改动原有递归逻辑的结构,也可以通过交叉空对象的小技巧强制TypeScript展开类型:

type BooleanResult<T> = {
  [K in keyof T]: T[K] extends object ? (BooleanResult<T[K]> & {}) : boolean[]
} & {}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:57:05