代码之家  ›  专栏  ›  技术社区  ›  Reactgular

如何使用扫描运算符来计算可观察到的空数据的发射值?

  •  1
  • Reactgular  · 技术社区  · 7 年前

    我需要一个void类型的可观测数据,它会发出发出的void值的数目。

    const subject = new Subject<void>();
    
    subject.pipe(
        scan((acc, curr) => acc + 1, 0)
    ).subscribe(count => console.log(count));
    
    subject.next(); // should output 1
    subject.next(); // should output 2
    subject.next(); // should output 3
    

    上面给出了以下编译器错误:

       TS2345: Argument of type 'MonoTypeOperatorFunction<number>' is not 
          assignable to parameter of type 'OperatorFunction<void, number>'.
          Types of parameters 'source' and 'source' are incompatible.
          Type 'Observable<void>' is not assignable to type 'Observable<number>'.
          Type 'void' is not assignable to type 'number'.
    

    也许我只是累了,但我似乎不能纠正错误。我看不出我的 scan() 操作员。

    1 回复  |  直到 7 年前
        1
  •  1
  •   cartant    7 年前

    要解决问题,可以为传递给的函数的参数指定类型 scan ,像这样:

    subject.pipe(
      scan((acc: number, curr: void) => acc + 1, 0)
    ).subscribe(count => console.log(count));
    

    打字 扫描 reduce 需要注意。基本上,它们是这样的,因为它们需要像旧版本的typescript那样。既然typescript 2.8是RXJS6支持的最低版本,那么应该可以改进类型。

    推荐文章