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

