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

TypeScript扩展接口时仅修改嵌套data.data属性的实现方法咨询

你之前的方案失效是因为 Omit 工具类仅支持处理接口的顶层属性,无法识别嵌套路径 "data.data",相当于完全没有生效,重写整个 data 属性时自然丢失了原有的 type、message 字段定义,才会触发类型校验报错。

可行实现方案

方案1:直接嵌套Omit处理子字段

直接对父接口的data属性类型做处理,省略原有data字段后和新类型交叉,无需硬编码原有字段:

export interface YTQueryResponse extends IAxiosResponse {
  data: Omit<IAxiosResponse['data'], 'data'> & {
    data: IYoutubeResponse
  }
}

这个写法会完整保留父接口data下的type、message字段的原有类型,仅替换内层data的类型为IYoutubeResponse,同时原有内层data的可选修饰符也会被覆盖为必选,如果需要保留可选可以加?修饰。

方案2:封装通用工具类型复用

如果有大量同类接口需要替换内层data类型,可以提前封装通用工具类减少重复代码:

// 通用工具类型:替换Axios响应内层data的类型
type ReplaceAxiosResponseData<BaseResponse, NewData> = BaseResponse & {
  data: Omit<BaseResponse['data'], 'data'> & {
    data: NewData
  }
}

// 直接使用工具类型生成目标接口
export type YTQueryResponse = ReplaceAxiosResponseData<IAxiosResponse, IYoutubeResponse>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:06