【问题标题】:Property 'filter' does not exist on type 'unknown' Observable<Course[]> in Rxjs 6Rxjs 6 中的“未知”Observable<Course[]> 类型不存在属性“过滤器”
【发布时间】:2021-01-11 20:07:05
【问题描述】:

因为我正在尝试像这样使用 filter

    beginnerCourses$: Observable<Course[]>;
    advancedCourses$: Observable<Course[]>;

    ngOnInit() {

      const http$ = createHttpObservables('/api/courses');

    const courses$ = http$.pipe(
      map(res => Object.values(res["payload"]))
    )

      this.beginnerCourses$ = http$
      .pipe(
          map(courses => courses
              .filter(course => course.category == 'BEGINNER')) //here problem is showing
      );
      
      this.advancedCourses$ = http$
      .pipe(
        map(courses => courses
          .filter(course => course.category == 'ADVANCED')) //here problem is showing
      );

      courses$.subscribe(courses => {
        this.beginnerCourses$ = courses.filter(course => course.category == 'BEGINNER'); //its working here
        this.advancedCourses$ = courses.filter(course => course.category == 'ADVANCED'); //its working here
      }, noop,
      () => console.log('completed'));
    }


map(courses =&gt; courses.filter(course =&gt; course.category == 'BEGINNER')))
map(courses =&gt; courses.filter(course =&gt; course.category == 'ADVANCED')))

的问题是 Property 'filter' does not exist on type 'unknown'

当我参加一门课程时,它以这种方式显示,并且在他的教程中它的工作原理。但我不知道我在这里缺少什么。

更新 1: 用过。

.pipe(
  map((courses: any[]) => courses.filter(
    course => course.category == 'BEGINNER')
  )
);

但在 Edge Console 中会显示。

ERROR TypeError: courses.filter is not a function

【问题讨论】:

    标签: javascript rxjs rxjs6


    【解决方案1】:

    这是一个打字稿错误,这意味着 map 不知道它正在转换的 observable 的类型。

    您可以通过几种不同的方式为 typescript 提供打字信息。

    试试:

    .pipe(
      map((courses: any[]) => courses.filter(
        course => course.category == 'BEGINNER')
      )
    );
    

    【讨论】:

    • ERROR TypeError: courses.filter 不是 Edge 控制台模式下的函数。
    • 看起来 http$ 并没有发出你认为的那样。不过我无法为你解决这个问题。
    【解决方案2】:

    找到答案。

    const http$: Observable<Course[]> = createHttpObservables('/api/courses');
    

    从课程 github extra added is 中引用它。

    .pipe(
            map(res => Object.values(res["payload"]))
          )
    

    http$。 它需要这个 Observable&lt;Course[]&gt; 才能使用 filter

    【讨论】:

      【解决方案3】:

      Observable添加到课程$

      const courses$: Observable<Course[]> = http$.pipe(
        map(res => Object.values(res["payload"]))
      )
      

      【讨论】:

        猜你喜欢
        • 2018-12-11
        • 2018-11-17
        • 2021-06-30
        • 2019-04-11
        • 2020-02-15
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多