Я стараюсь следовать этому example в обучении switchMap
для rxjs
. Пример работы: here и написан на языке TypeScript. Я попытался скомпоновать что-то подобное в TypeScript (Angular 2) в VS Code, но я получаю ошибку компилятора.Как отличить общие типы Observable в TypeScript?
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
?
В чем причина закрытия голосов? –
Почему вы используете 'Observable.of' в' switchMap'? Пример, который вы указали, не имеет. –
Я получаю ошибку компиляции в VS Code, если я этого не делаю. Обратите внимание, что пример указан в TypeScript, но копирование/вставка этого кода в код VS (внутри проекта Angular 2) не работает. –