我想關注此example學習switchMap
對於rxjs
。運行示例是here並以TypeScript編寫。我試圖在VS Code的TypeScript(Angular 2)中編寫類似的代碼,但是我得到一個編譯器錯誤。如何區分TypeScript中的泛型Observable類型?
Operator '+' cannot be applied to types 'Observable | Observable' and 'Observable | Observable'. (parameter) curr: Observable | Observable
我的代碼如下。
playSubject = new Subject<boolean>();
pauseSubject = new Subject<boolean>();
interval$ = Observable.interval(1000).mapTo(-1);
pause$ = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
resume$ = Observable.from(this.playSubject).mapTo(this.interval$);
timer$ = Observable
.merge(this.pause$, this.resume$)
.startWith(this.interval$)
.switchMap(v => Observable.of(v))
.scan((acc, curr) => {
return curr ? curr + acc : acc; //problem right here
});
ngAfterViewInit() {
this.timer$.subscribe(data => {
console.log(data);
});
}
play() { //bound to button click event
this.playSubject.next(true);
}
pause() { //bound to button click event
this.pauseSubject.next(false);
}
我可以修改代碼的scan
功能如下,但後來我需要知道curr
是否Observable<boolean>
或Observable<number>
。
playSubject = new Subject<boolean>();
pauseSubject = new Subject<boolean>();
interval$ = Observable.interval(1000).mapTo(-1);
pause$ = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
resume$ = Observable.from(this.playSubject).mapTo(this.interval$);
timer$ = Observable
.merge(this.pause$, this.resume$)
.startWith(this.interval$)
.switchMap(v => Observable.of(v))
.scan((acc, curr) => {
return curr; //how do i check for Observable<Type>?
});
什麼我做錯了或如何以檢查內部scan
可觀測類型的任何想法?
投票結束的原因是什麼? –
爲什麼在'switchMap'中使用'Observable.of'?你提供的例子沒有。 –
如果我不這樣做,我會在VS Code中發現一個編譯錯誤。請注意,該示例在TypeScript中,但是將其複製到VS代碼(在Angular 2項目中)不起作用。 –