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

TypeScript中如何将接口属性联合类型的null替换为undefined

实现方案

完全可以实现,你可以通过TypeScript的映射类型+条件类型编写通用的转换工具类型,实现将接口属性联合类型中的null批量替换为undefined的需求。

1. 基础版(仅转换第一层属性)

// 定义单个联合类型的null转换逻辑
type ReplaceNullInUnion<T> = T extends null 
  ? undefined 
  : T extends infer U | null 
    ? ReplaceNullInUnion<U> | undefined
    : T;

// 遍历接口所有属性做转换
type ReplaceNullWithUndefined<T> = {
  [K in keyof T]: ReplaceNullInUnion<T[K]>
};

使用示例

// 原接口
interface A {
  name: string
  foo: string | null
  bar: number | null
}

// 转换后的类型
type AWithUndefined = ReplaceNullWithUndefined<A>;

转换后AWithUndefined的结构和要求完全一致:

interface AWithUndefined {
  name: string
  foo: string | undefined
  bar: number | undefined
}

2. 递归版(支持深层嵌套属性转换)

如果你的接口存在嵌套对象属性,可以使用递归版工具类型实现全层级的null替换:

type DeepReplaceNullWithUndefined<T> = T extends object
  ? { [K in keyof T]: DeepReplaceNullWithUndefined<T[K]> }
  : T extends null
  ? undefined
  : T extends infer U | null
  ? DeepReplaceNullWithUndefined<U> | undefined
  : T;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:02