如何在Angular中管道/映射Observable

时间:2019-01-08 03:21:47

标签: angular typescript angular7

一个嵌套的对象显示为[object Object],所以我试图通过管道和地图进行投射,但没有任何位置。我已经将模型作为类和接口进行了尝试,但没有帮助。有人可以告诉我我在做什么错吗?谢谢。

功能:

  getClients(customerId: number): Observable<Client[]> {
    let clientUrl = 'SOME_URL';
    return this.http.get<Client[]>(clientUrl)
      .pipe(map(client: Client) => client.address as Address);
  }

模型:

import { Address } from './address.model';

export class Client{
  id: number;
  name: string;
  accountNumber: string;
  addressId: number;
  phoneNumber: string;
  address: Address;
}


export class Address{
  id: number;
  name: string;
  addressLine1: string;
  addressLine2: string;
  city: string;
  postalCode: string;
}

我遇到了错误: 错误TS2345(TS)无法将类型为“地址”的参数分配给类型为“ OperatorFunction <{},Client []>”的参数。

2 个答案:

答案 0 :(得分:3)

1)从getClients()方法中删除管道部分

2)在订阅getClients()之前创建管道映射,或者创建另一个方法,该方法仅处理从getClients()返回的可观察对象的管道部分。

mapToAddress(): Observable<Address[]> {
  this.getClients.pipe(
    map((clients: Client[]) => clients.map(client => client.address))
  )
}

了解这一点很重要:当您在.pipe()中调用.map()方法时,在这种情况下您没有得到一个客户端,而是获得了整个客户端数组,并被推送到Observable。因为您映射了值,所以这些值存储在Observable中-类型为的值。

您的管道映射将在某些Observable上工作,它会发出类型的单个客户端,而不是数组。

答案 1 :(得分:0)

问题在这里:

Assets    
     Content
       titleMap
          wood_titleset.tsx

您请求函数以observable(客户端数组)的形式返回,但实际上您是在返回Address的Observable。

getClients(customerId: number): Observable<Client[]> {

这就是该函数引发此错误的原因。 将Observable替换为Observable

希望一切顺利,一切顺利!