Сопоставить массив типа T1 с массивом типа T2 - PullRequest
1 голос
/ 13 мая 2019

У меня есть следующий класс Typescript:

export class Envelope<T> {
  result: T;
  constructor(result: T) {
    this.result = result;
  }
}

Мне нужно сопоставить Envelope<RecentPostResponse[]> с Observable<PostModel[]>:

getPosts(): Observable<PostModel[]> {

  return this.postService.getRecent().pipe(

    map((envelope: Envelope<RecentPostResponse[]>) => 

    envelope.result.map((response: RecentPostResponse) => { 

      return {
        id: response.id, 
        // Other properties
      };

    })));

Но я получаю сообщение об ошибке:

Argument of type 'OperatorFunction<Envelope<RecentPostResponse[]>, { id: number; }[]>'.
Type 'Envelope<RecentPostResponse[]>' is not assignable to type 'Envelope<RecentPostResponse>'.

Чего мне не хватает?

Обновление

Изначально конверт был (result type was T[]):

export class Envelope<T> {
  result: T[];
  constructor(result: T[]) {
    this.result = result;
  }
}

Ипреобразование работало так:

getPosts(): Observable<PostModel[]> {

  return this.postService.getRecent().pipe(

    map((envelope: Envelope<RecentPostResponse>) => 

      envelope.result.map((response: RecentePostResponse) => { 

        return {
          id: response.id, 
        };

      }))); 

    };

Затем я сделал простое изменение в Конверт (result type changed from T[] to T):

export class Envelope<T> {
  result: T;
  constructor(result: T) {
    this.result = result;
  }
}

Но мне не удается адаптировать преобразование к нему ...

1 Ответ

1 голос
/ 13 мая 2019

Вы на самом деле не определяете тип результата.

Это определение типа карты:

export declare function map<T, R>(
  project: (value: T, index: number
) => R, thisArg?: any): OperatorFunction<T, R>;

Вот как вы можете его использовать:

Observable<PostModel[]> this.postService.getRecent().pipe(

  map<Envelope<T1>,Envelope<T2>>((envelope: Envelope<RecentPostResponse[]>) => 

  return envelope.result.map<T1,T2>((response: RecentPostResponse) => { 

    return {
      id: response.id, 
      // Other properties
    };

  })));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...