Return Angular 5 中 http.get 的单个项目的 Observable

Return Observable of single item from http.get in Angular 5

我有一项服务可以将请求发送到内存 Web-api。该服务包括一个我想查询(通过查询字符串)单个项目的 API 的方法。

无论在通用 http.get 方法中指定单个项目,我都是 returned 数组。

这不同于当我只return编辑单个项目时使用 ID 而不是查询为单个项目调用 API。

this.http.get<ITrack>(`api/tracks/1`)
  .subscribe(track => console.log(JSON.stringify(track)));

returns

{"id":1,"artist":"Radiohead","name":"OK Computer","durationSeconds":61,"nominator":null,"playlistPosition":1}

其中

this.http.get<ITrack>(`api/tracks/?playlistPosition=1`)
  .subscribe(track => console.log(JSON.stringify(track)));

returns

[{"id":1,"artist":"Radiohead","name":"OK Computer","durationSeconds":61,"nominator":null,"playlistPosition":1}]

我可以得到对 return 的第二次调用,只是具有以下内容的项目:

this.http.get<ITrack>(`api/tracks/?playlistPosition=1`)
.pipe(
  map(t => t[0])
)
.subscribe(track => console.log(JSON.stringify(track)));

但是我不能使用像 single 或 first 这样的方法,因为编译器需要 return 类型的 ITrack。

这里 return 单个项目的正确方法是什么?

因此,如果端点总是 returns 一个列表,请调用 get 使用 ITrack 数组键入的方法。

只需将 .get<ITrack>(...) 替换为 .get<ITrack[]>(...)