0

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

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

我发现 switchMap 中的 resultSelector 在 rxJs6 中已被弃用,这就是我尝试这种方法的原因。却被困在这里。

4

1 回答 1

0

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

第一个解决方案:在映射最终的 observable 时显式添加类型。

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])),
    ),
  );
于 2018-08-25T10:54:04.143 回答