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

如何用RxJS映射ResultObject<RequestList[]>?类型错误求助

解决ResultObject<RequestList[]>映射时的类型不匹配问题

错误原因

你当前的代码中,response.data.map()返回的是RequestList[]数组,但你试图将它直接赋值给ResultObject<RequestList[]>类型的变量。而ResultObject接口要求必须包含data属性,因此触发类型错误:

Property 'data' is missing in type '{ ... }[]' but required in type 'ResultObject<RequestList[]>'

修复方案

需要将处理后的RequestList[]数组重新包装回ResultObject结构中,同时保留原响应的其他属性(比如可选的resultAction)。修正后的代码如下:

public getFiltredRequestListt(
  filter: RequestFilter
): Observable<ResultObject<RequestList[]>> {
  return this.http
    .get<ResultObject<RequestList[]>>(`${this.apiUrl}...`)
    .pipe(
      map((response: ResultObject<RequestList[]>) => {
        // 处理data数组里的每个RequestList项,转换日期字段
        const processedData: RequestList[] = response.data.map(
          (request: RequestList) => ({
            ...request,
            validFrom: request.validFrom ? new Date(request.validFrom!) : request.validFrom,
            validUntil: request.validUntil ? new Date(request.validUntil!) : request.validUntil,
          })
        );
        // 重新包装成ResultObject结构,保留原响应的resultAction
        const requestList: ResultObject<RequestList[]> = {
          ...response,
          data: processedData
        };
        return requestList;
      })
    );
}

关键改动说明

  • 拆分处理步骤:先单独处理response.data数组,得到转换后的RequestList[]
  • 重构ResultObject:通过扩展运算符...response保留原响应的所有属性(比如resultAction),再替换data为处理后的数组
  • 修正笔误:原代码中的requesttList拼写错误,改为requestList
  • 修正URL语法:原代码中请求URL末尾多了一个冗余的},已移除

模型定义(参考)

export interface ResultObject<T> {
  data: T;
  resultAction?: ResultAction;
}

export interface ResultAction {
  code: number;
  message: string;
}

export interface RequestList {
  // 其他属性
  validFrom: Date;
  validUntil: Date;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:43:08