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

TypeScript中如何合并type属性不同的两个接口为新类型

解决TypeScript中合并User和Admin创建PowerUser类型的问题

你当前的写法无法生效的原因是:User | Admin 的 type 字段类型是 'user' | 'admin',当它和 { type: 'powerUser' } 交叉时,type 字段会变成 'user' & 'admin' & 'powerUser',这是一个never类型,导致整个 PowerUser 类型无效。

要实现包含User和Admin除type外的所有字段、且type固定为'powerUser'的类型,你可以借助TypeScript内置的Omit工具类型来实现,无需重复定义字段:

方案一:分别移除两个接口的type后交叉

interface User {
  type: "user";
  name: string;
  age: number;
  occupation: string;
}

interface Admin {
  type: "admin";
  name: string;
  age: number;
  role: string;
}

// 移除User和Admin的type字段后交叉,再添加新的type
type PowerUser = Omit<User, 'type'> & Omit<Admin, 'type'> & { type: 'powerUser' };

// 验证示例
const example: PowerUser = {
  type: "powerUser",
  age: 20,
  name: "max",
  occupation: "FE",
  role: "ma"
}; // 类型检查通过

方案二:先交叉两个接口再移除type

因为User & Admin本身就会合并两个接口的所有字段(除了冲突的type),所以也可以先交叉再移除type,写法更简洁:

type PowerUser = Omit<User & Admin, 'type'> & { type: 'powerUser' };

两种方案最终得到的PowerUser类型完全一致,都会包含name、age、occupation、role以及固定值为'powerUser'的type字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:55:18