我需要一个可观察到的void类型,它发出所发出的void值的数量。
String
上面给出了以下编译器错误:
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'.
运算符没有任何问题。
答案 0 :(得分:2)
要解决您的问题,可以为传递给scan
的函数的参数指定类型,如下所示:
subject.pipe(
scan((acc: number, curr: void) => acc + 1, 0)
).subscribe(count => console.log(count));
scan
和reduce
的键入需要引起注意。基本上,它们就是它们的样子,因为它们必须与旧版本的TypeScript一样。现在,TypeScript 2.8是RxJS 6的最低支持版本,应该可以改善键入。
答案 1 :(得分:-1)
您只需轻按
const { Subject } = rxjs;
const { tap } = rxjs.operators;
const subject = new Subject();
count = 0;
subject.pipe(
tap(() => { count++; })
).subscribe(_ => console.log(count));
subject.next(); // should output 1
subject.next(); // should output 2
subject.next(); // should output 3
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>