Тип 'Observable <(T | R []) []>' нельзя назначить типу 'Observable <[T, R []]> - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь отобразить данные из двух наблюдаемых в третью, например

  return this.coursesService
  .findCourseByUrl(route.params['id'])
  .pipe(
    switchMap((course: Course) =>
      this.coursesService
        .findLessonsForCourse(course.id)
        .pipe(map((lessons: Lesson[])=> [course, lessons)])
    )
  );

Но я получаю следующее исключение

Type 'Observable<(Course | Lesson[])[]>' is not assignable to type 'Observable<[Course, Lesson[]]>'.
Type '(Course | Lesson[])[]' is not assignable to type '[Course, Lesson[]]'.
Property '0' is missing in type '(Course | Lesson[])[]'.

Я обнаружил, что resultSelector в switchMap устарел в rxJs6, поэтому я пробовал этот подход. Но застрял здесь.

1 Ответ

0 голосов
/ 25 августа 2018

Выяснил следующие два способа, хотя не уверен насчет второго решения.

Первое решение: явно добавлены типы при отображении конечной наблюдаемой.

return this.coursesService
  .findCourseByUrl(route.params['id'])
  .pipe(
    switchMap((course: Course) =>
      this.coursesService
        .findLessonsForCourse(course.id)
        .pipe(map(lessons => [course, lessons] as [Course, Lesson[]])),
    ),
  );

Второй раствор

return this.coursesService
  .findCourseByUrl(route.params['id'])
  .pipe(
    switchMap((course: Course) =>
      this.coursesService
        .findLessonsForCourse(course.id)
        .pipe(merge(lessons => [course, lessons])),
    ),
  );
...