如何将对象数组映射到我的类型数组

时间:2017-08-15 04:36:04

标签: angular typescript

我有一个班级:

export class    Stuff {
      id: string;
      namd: string;
    }

angular < 4.3我有这个电话:

getStuff(): Observable<Stuff[]> {
    return this.http.get('api-url-here/stuff')
        .map((data: Response) => {
            return data.json()
                .map((item: any) => {
                    return {
                    id: item.id,
                    name: item.name
                };
        });
    })
}

使用angular >= 4.3我将其更改为:

getStuff(): Observable<Stuff[]> {
    return this.http.get<Stuff[]>('api-url-here/stuff')
        .map((data: any) => {
            return data
                .map((item: any) => {
                    return {
                    id: item.id,
                    name: item.name
                };
        });
    })
}

我收到了我的api的一些东西,看起来像那样。

[
 {"id":1,"name": "name" }
]

从上面的代码示例中我可以看到,我必须map两次数据以获得我的类型形状(Stuff[])。有没有更好的方法使用angular 4.3+

执行此操作

1 个答案:

答案 0 :(得分:3)

您在新的HttpClientModule中使用了输入的响应,因此在第一个map中,您的结果已经被解析。

getStuff(): Observable<Stuff[]> {
  return this.http.get<Stuff[]>('api-url-here/stuff');
}

应该有效。然后

SomeStaffService.getStuff().subscribe(staff => console.log(staff));

更新

在这种情况下,您将能够以两种方式处理错误。在您的服务之外

SomeStaffService.getStuff().subscribe(
  staff => console.log(staff),
  (err: HttpErrorResponse) => {
    if (err.error instanceof Error) {
      console.log("Client-side error occured.");
    } else {
      console.log("Server-side error occured.");
    }
  }
);

或者您可以在您的服务中订阅并在那里发现错误。请参阅documentation