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
相关产品推荐
相关产品推荐

