尝试使用地图运算符在angular中变换对象类型转换

问题描述

Api响应(json)-

{
    "count": 1050,"next": "....","prevIoUs": null,"results": [
        {
            "name": "Test1","url": "https://test/1/"
        },{
            "name": "Test2","url": "https://test/2/"
        }
     ]
}

接口:

export interface ITestModel{
  name: string;
  url: string;
}

服务:

getData(): Observable<ITestModel[]> {
    return this.http.get<ITestModel[]>(this.apiUrl).pipe(
      map((res) =>
        res.map((data) => ({
          name: data.name,url: data.url
        }))
      )
    );
  }

错误:(当我在控制器中订阅上述功能时)

core.js:4352错误TypeError:res.map不是MapSubscriber.project的函数(test.service.ts:19)

期望:

  1. 在getData()函数中,我想将可观察到的转换为 ITestModel []
  2. 订阅时(Json)的预期输出

[ { “ name”:“ Test1”, “ url”:“ https:// test / 1 /” }, { “ name”:“ Test2”, “ url”:“ https:// test / 2 /” } ]

谢谢!

解决方法

尝试一下:

getData(): Observable<ITestModel[]> {
    return this.http.get<any>(this.apiUrl).pipe(
      map((res) =>
        res.results.map((data) => {
          return { 
             name: data.name,url: data.url
           };
        });
      )
    );
  }