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

能否实现仅对含null的属性追加undefined的TypeScript条件类型?

满足需求的AugmentType泛型实现
type AugmentType<T extends object> = {
  [K in keyof T]: null extends T[K] ? T[K] | undefined : T[K]
}

// 针对示例类型的验证
type MyType = {
  name: number;
  description: string | null;
  title: string | null;
}

type ProcessedType = AugmentType<MyType>
// ProcessedType 与期望的 OutputType 结构完全等价
关键逻辑说明
  • 泛型首先约束输入为对象类型,避免对非对象类型做无意义的属性遍历。
  • 利用TS内置的映射类型语法[K in keyof T]遍历输入类型的所有属性,完全保留原有属性的可选性、readonly修饰符,不会破坏原始类型的结构。
  • 核心判断逻辑使用null extends T[K]完成null成员识别:
    • 该写法符合条件类型的分配规则:判断null类型是否可以被赋值给当前属性的类型,以此识别属性联合中是否包含null成员。
    • 常见踩坑:不要反向写成T[K] extends null,该写法仅能识别本身为纯null类型的属性,对string | null这类包含其他成员的联合类型判断会完全失效。
  • 条件分支处理完全匹配需求规则:
    • 属性类型包含null时,直接在原始类型基础上联合undefined,不会修改原有类型成员(如string | null处理后为string | null | undefined)。
    • 属性类型不包含null时,直接返回原始类型,不添加任何多余的类型成员(如number类型的name属性会完全保留原始定义)。

该写法完全适配最新版TypeScript,无需额外配置或语法兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 18:36:03