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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:10:29