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

如何在TypeScript泛型接口中固定字段并接收泛型额外属性

实现固定字段的泛型响应接口

你可以通过两种方式实现需求,核心是把固定的success和message字段与泛型接收的额外属性合并:

方法一:类型别名 + 交叉类型

这种方式灵活,适合合并任意对象类型:

// 定义泛型类型,固定success和message,T为额外属性类型(默认空对象)
type ICustomResponse<T = {}> = {
  success: boolean;
  message?: string;
} & T;

方法二:接口继承

如果更倾向于接口语法,可以让接口继承泛型类型(限制T为对象类型):

// 接口继承泛型T,同时声明固定字段
interface ICustomResponse<T extends object = {}> extends T {
  success: boolean;
  message?: string;
}

使用示例

两种方式的调用逻辑和你原代码一致,泛型传入额外属性即可:

export const register = async (body: Body) => {
  const { data } = await axios.post<
    ICustomResponse<{ hasNickname?: boolean; hasEmail?: boolean }>
  >('/user/register', body);
  return data;
};

此时data会同时包含固定的success、message字段,以及泛型中定义的hasNickname、hasEmail属性。

注意:你原代码中的...T?写法在TypeScript接口中不合法,不能用扩展运算符展开泛型类型,必须通过交叉类型或接口继承的方式合并属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:35:03