typescript - Hvordan pipe/mappe et Observable i Angular


Et innfelt objekt vises som [object Object], så jeg prøver å caste det via pipe og map, men jeg kommer ingen vei. Jeg har prøvd modellene som klasser og grensesnitt, men ingen hjelp. Kan noen fortelle meg hva jeg gjør galt? Takk.

Funksjonen:

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

Modellene:

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;
}

Jeg får feilen: Feil TS2345 (TS) Argument av typen 'Address' kan ikke tildeles til parameter av typen 'OperatorFunction<{}, Client[]>'.

Svar #1

1) fjern rørdelen fra din getClients()-metode

2) gjør pipe-map før du abonnerer på getClients() eller lag en annen metode som bare gjør piping-delen med observablen som returneres fra getClients()

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

Dette er viktig å forstå: når du kaller .map() metoden inne i .pipe(), får du ikke en enkelt klient i dette tilfellet, du får hele klientlisten, sendt til Observable. Fordi du mapper verdiene som er lagret i Observable - verdiene av typen: < Client[] >.

Din pipe-map ville fungere på noen Observable, som sender ut en enkelt klient av typen < Client >, ikke et array.

Relaterte artikler