类型'Observable <(T | R [])[]>'不可分配给类型'Observable <[T,R []]>

时间:2018-08-25 10:18:56

标签: rxjs6 switchmap

我正在尝试将数据从两个可观察对象映射到第三个类似对象

  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[])[]'.

我发现rxJs6中不推荐使用switchMap中的resultSelector,这就是我尝试这种方法的原因。但是被困在这里。

1 个答案:

答案 0 :(得分:0)

想出了以下两种方法,尽管不确定第二种解决方案。

第一个解决方案:在映射最终的可观察对象时显式添加了类型。

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])),
    ),
  );