angular - Preveďte jeden typ objektu na iný typ objektu pomocou RxJS


Mám nasledovné modely:

export interface IdName { 
    id: number;
    name: string;
}

export interface Product { 
    id: number;
    name: string;
    currency?: string;
    additionalData: any;
}

Chcel by som previesť Observable<Product[]> na Observable<IdName[]> v Angular/TypeScript. Skúsil som

getData() : Observable<IdName[]> {

        // Note: getProducts returns Observable<Product[]>

        this.productService.getProducts().pipe(
            return map((product: Product) => {
                {id: product.id, name: product.name}
            });
        );

    }

Avšak ukazuje niektoré chyby v syntaxi. Ako ich môžem opraviť?

Odpoveď č. 1

Máte niekoľko preklepov, zmeňte na:

getData(): Observable<IdName[]> {
    return this.productService.getProducts().pipe(
       map((products: Product[]) => {

         return products.map(product => ({
           id: product.id,
           name: product.name
         } as IdName));
       })
    );
}

Odpoveď č. 2

Nesprávne ste umiestnili príkaz return a bodkočiarku.

Malo by to byť:

return this.productService.getProducts().pipe(
  map((product: Product) => {
    return {id: product.id, name: product.name}
  })
);

pipe() prijíma zoznam (varargs) operácií definovaných ako operator(input => output) alebo rozšírenú formu operator(input => { return output; })