如何将TypeScript接口的可选字段转换为类型|undefined形式?
解决方案
要把类型中的可选字段转为「原类型 | undefined」的必填字段,同时保留原有必填字段不变,用TypeScript的映射类型就能实现:
定义工具类型
type OptionalToRequiredUndefined<T> = { [K in keyof T]-?: T[K]; };
代码说明
keyof T:提取目标类型T的所有键名;[K in keyof T]-?::遍历每个键名,-?用来移除键的可选修饰符(?),强制转为必填字段;T[K]:保留原字段的类型——对于原本的可选字段,TypeScript会自动将其类型推断为「原类型 | undefined」,所以转为必填后,类型自然就是原类型 | undefined。
示例演示
用你给出的AnyObject测试:
interface AnyObject { a: string; b?: number; } // 执行类型转换 type CorrectAnyObject = OptionalToRequiredUndefined<AnyObject>;
此时CorrectAnyObject的类型等价于:
interface CorrectAnyObject { a: string; b: number | undefined; }
如果需要更直观的拆分写法,也可以把必填、可选字段分开处理后再合并,效果完全一致:
// 提取原有必填字段 type RequiredPart<T> = Pick<T, Exclude<keyof T, keyof Partial<T>>>; // 把可选字段转为必填的「原类型 | undefined」 type OptionalToRequiredPart<T> = { [K in keyof Partial<T>]-?: T[K] }; // 合并两个部分 type OptionalToRequiredUndefined<T> = RequiredPart<T> & OptionalToRequiredPart<T>;
内容的提问来源于stack exchange,提问作者user1920116
相关产品推荐
相关产品推荐

