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

如何创建仅包含两个TypeScript接口非共享属性的类型

实现TypeScript的XOR类型,提取两个接口的非共享属性

给定两个TypeScript接口:

type I1 = {
    a: string
    b: string
    c: number
}

type I2 = {
    a: string
    b: string
    d: string
}

我们需要实现一个XOR<T1, T2>类型,使其仅包含两个接口的非共享属性,最终期望结果如下:

type Result = XOR<I1, I2>

// 期望结果
type Result = {
    c: number
    d: string
}

解决方案

先定义工具类型提取差异键,再基于差异键构建目标类型:

// 提取两个类型的非共享键
type DiffKeys<T, U> = Exclude<keyof T | keyof U, keyof T & keyof U>

// 实现XOR类型
type XOR<T1, T2> = {
    [K in DiffKeys<T1, T2>]: K extends keyof T1 ? T1[K] : T2[K]
}

思路说明

  1. 筛选差异键:
    • keyof T | keyof U:获取两个类型所有键的联合集合
    • keyof T & keyof U:获取两个类型的共享键集合
    • Exclude<联合键, 共享键>:从所有键中剔除共享键,得到仅存在于其中一个类型的差异键
  2. 构建目标类型:
    遍历差异键,通过条件判断确定当前键属于哪个类型,取对应的属性类型,最终组合成只包含非共享属性的类型。

验证结果

使用上述类型后:

type Result = XOR<I1, I2>
// 实际类型为 { c: number; d: string },完全符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:29