TS 2339:返回其他信息以及Observable <myobject>

时间:2019-02-19 17:58:32

标签: angular typescript angular6

我有一个Web服务,该服务返回对象数组(给定Entry的{​​{1}}的抽象数组)以及分页数据。

在Angular中,我尝试将数据恢复为Site,还将分页数据恢复为

我有一个错误,但与此链接

Observable<MyObj>

1)如何消除此错误,并且
2)是在客户端处理分页数据的正确方法吗?

1 个答案:

答案 0 :(得分:0)

您可以定义第二个接口,以更好地定义您要返回的内容的形状:

export interface EntryPlus {
   entries: Entry[];
   pager: Pager
}

这定义了方法返回的数据。您可能想要一个更好的名字。 :-)

然后更改方法以返回Observable<EntryPlus>

findEntries(
  siteId: number, filter = '', sortOrder = 'asc', sortActive= 'date',
  pageIndex = 0, pageSize = 10): Observable<EntryPlus> {

return this.http.get(`${this.API_URL}/api/entries`, {
    params: new HttpParams()
      .set('siteId', siteId.toString())
      .set('filter', filter)
      .set('sortOrder', sortOrder)
      .set('sortActive', sortActive)
      .set('pageIndex', pageIndex.toString())
      .set('pageSize', pageSize.toString()),
    observe: 'response'
  }).pipe(
    map((res: any) => {
      // I assume the following two lines from your original code are correct?
      const pager = JSON.parse(res.headers.get('X-Pagination'));
      const playload: { [id: number]: Entry } = res.body;

      // Map them into the EntryPlus structure
      return {
         entries: payload,
         pager: pager
      }
    })
  );

}

注意:未检查语法!

然后,调用代码可以从返回的值中拉出数组。如果您想用一些调用代码来更新您的问题,我可以提供一个示例。

类似这样的东西:

  ngOnInit(): void {
    this.entryService.findEntries().subscribe(
      data => {
        this.entries = data.entries;   // This is now the array you need
        this.pager = data.pager;       // This is now the pager info you need
      },
      error => this.errorMessage = <any>error
    );
  }

此代码调用findEntries方法,然后将返回值分为两部分:Entries[]pager

相关问题