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

如何实现TypeScript类型中null与undefined的相互替换?

TypeScript 类型转换:替换 null/undefined 类型

针对你提出的两种类型转换需求,可以通过 TypeScript 的映射类型和条件类型实现精准替换,不会额外新增 null 或 undefined 类型。

场景一:将类型中的 undefined 替换为 null

需求:把类型中属性的 undefined 类型替换成 null,其他类型保持不变。

实现工具类型 ReplaceUndefinedWithNull:

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

使用示例:

// 原类型
type A = {
  a: number | undefined;
  b: string;
};

// 转换后的类型
type B = ReplaceUndefinedWithNull<A>;
// 等价于:
// type B = {
//   a: number | null;
//   b: string;
// };

场景二:将类型中的 null 替换为 undefined

需求:把类型中属性的 null 类型替换成 undefined,其他类型保持不变。

实现工具类型 ReplaceNullWithUndefined:

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

使用示例:

// 原类型
type A = {
  a: number | null;
  b: string;
};

// 转换后的类型
type B = ReplaceNullWithUndefined<A>;
// 等价于:
// type B = {
//   a: number | undefined;
//   b: string;
// };

逻辑说明

  • 映射类型 [K in keyof T] 遍历原类型的所有属性;
  • 第一层条件判断处理属性类型就是 undefined(或 null)的情况;
  • 第二层条件判断处理属性类型是「基础类型 | undefined」(或「基础类型 | null」)的复合情况,通过 infer U 提取基础类型,再拼接目标类型;
  • 最后保留原类型中不包含目标替换类型的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:57:27