TypeScript如何派生仅指定字段为必填的类型?自定义工具类型遇问题
解决TypeScript派生指定必填字段类型的问题
你的工具类型无效的核心原因是交叉了原类型T——原类型A里的c是必填项,交叉类型会保留字段的必填属性,所以即便后面把c设为可选,最终结果还是会要求c必填。
修正方案很简单:去掉工具类型里的T &部分,直接基于原类型的字段重新构造新类型,不依赖原类型的可选/必填修饰符:
// 修正后的工具类型 export type WithRequiredOnly<T, K extends keyof T> = { // 将指定字段K强制设为必填 [P in K]-?: T[P]; } & { // 将剩余字段强制设为可选 [P in Exclude<keyof T, K>]?: T[P]; };
用原类型A测试:
// 原类型 type A = { a: string b?: number c: boolean d?: string } // 派生目标类型A2 type A2 = WithRequiredOnly<A, 'a' | 'b'>;
此时A2的结构完全符合需求:
type A2 = { a: string b: number c?: boolean d?: string }
内容的提问来源于stack exchange,提问作者sev
相关产品推荐
相关产品推荐

