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

如何修改MutuallyExclusive工具类型,为互斥键添加可选性?

修改互斥联合工具类型,将非目标字段设为可选never类型

你可以通过拆分目标字段与非目标字段的映射逻辑,把非目标字段转为可选的never类型,以下是简洁的实现方案:

修改后的工具类型

type MutuallyExclusive<T extends Record<string, any>> = {
  [K in keyof T]: 
    Pick<T, K> & Partial<Record<Exclude<keyof T, K>, never>>;
}[keyof T];

逻辑说明

  • Pick<T, K>:提取当前遍历到的目标键K,保留原字段的必填性
  • Exclude<keyof T, K>:排除目标键,得到所有非目标字段的集合
  • Record<..., never>:为非目标字段设置never类型
  • Partial<...>:把这些非目标字段转为可选属性
  • 最后通过交叉类型&合并两部分,再遍历所有键生成互斥联合类型

验证效果

用你提供的Attributes接口测试:

interface Attributes {
  id: string;
  email: string;
  username: string;
}

type ExclusiveAttributesResult = MutuallyExclusive<Attributes>;

生成的结果完全符合预期:

type ExclusiveAttributesResult = {
    id: string;
    email?: never;
    username?: never;
} | {
    id?: never;
    email: string;
    username?: never;
} | {
    id?: never;
    email?: never;
    username: string;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:42:44