类型的参数' {count:number; }'不能分配类型'数字的参数

时间:2017-03-05 20:23:34

标签: angular rxjs5

使用此代码

const start$ = Observable.fromEvent(this.getNativeElement(this.start),'click');
    const stop$ = Observable.fromEvent(this.getNativeElement(this.stop),'click');
    const interval$ = Observable.interval(1000);
    const data = {count:0};

    const intervalThatStops$ = interval$
    .takeUntil(stop$);

start$
    .switchMapTo(intervalThatStops$)
    .startWith(data)
    .scan((acc,curr) => {
      return {
        count: acc.count+1
      };
    })
    .subscribe((x)=> console.log(x.count));

我已进入控制台

类型的参数' {count:number; }'不能指定类型'数字|的参数IScheduler&#39 ;.   输入' {count:number; }'不能指定类型' IScheduler'。     物业'现在'缺少类型' {count:number; }'。)

应该快速修复

.startWith<any>(data)

但是,正确的方法是什么?

提前致谢

1 个答案:

答案 0 :(得分:2)

将其分成几部分,

start$
    .switchMapTo(intervalThatStops$)
    .startWith(data)

在switchMapTo之后,生成的Observable将从intervalThatStops $中发出值。而intervalThatStops $正在发出纯数字。因此,当您尝试.startWith({count:0})时,您会收到Typescript错误,因为您的observable正在发出数字,但您正在尝试使用对象({count:0})启动。

解决方案是在使用startWith之前将intervalThatStops $映射到您的对象。

你可以做很多种方式 - 一种可能性是:

start$
    .switchMapTo(intervalThatStops$)
    .map(i => ({count: i})))
    .startWith(data)