项目禁用可选类型,如何转换库接口可选属性为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
相关产品推荐
相关产品推荐

