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

项目禁用可选类型,如何转换库接口可选属性为string|null?

解决方案

可以通过TypeScript的映射类型实现这个转换,根据需求不同有两种实现方式:

方式一:统一处理所有属性(包括原本的必选属性)

如果希望把接口中所有属性(不管原本是否可选)都转为「必选 + 原类型 | null」,可以用这个工具类型:

type OptionalToNullable<T> = {
  [K in keyof Required<T>]: T[K] | null;
};

使用示例

假设依赖库提供的接口是:

// 依赖库定义的接口
interface LibA {
  url?: string;
  title?: string;
}

用工具类型生成符合要求的自定义接口:

type MyA = OptionalToNullable<LibA>;

最终MyA的类型等价于:

interface MyA {
  url: string | null;
  title: string | null;
}

方式二:仅处理可选属性,保留原必选属性

如果接口中存在原本就必选的属性,希望只把可选属性转为「必选 + 原类型 | null」,而必选属性保持不变,可以用这个工具类型:

type OptionalToNullable<T> = {
  // 处理可选属性:移除undefined,添加null,并转为必选
  [K in keyof T as undefined extends T[K] ? K : never]: Exclude<T[K], undefined> | null;
} & {
  // 保留原必选属性
  [K in keyof T as undefined extends T[K] ? never : K]: T[K];
};

使用示例

假设依赖库接口包含必选属性:

// 依赖库定义的接口
interface LibA {
  url?: string;
  id: number; // 原本就是必选属性
}

生成的自定义接口:

type MyA = OptionalToNullable<LibA>;

等价于:

interface MyA {
  url: string | null;
  id: number; // 必选属性保持原样
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:26:04