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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:50:04