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
相关产品推荐
相关产品推荐

