类型'{count:number; }“是不能分配给类型的参数”数
问题描述:
有了这个代码类型'{count:number; }“是不能分配给类型的参数”数
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));
我在控制台得到
类型“{算的参数:数; }'不能分配给类型为'number |的参数IScheduler”。 键入'{count:number; }'不能分配给'IScheduler'类型。 属性'now'在类型'{count:number; }”)。
速战速决应该
.startWith<any>(data)
但什么是正确的做法吗?
在此先感谢
答
从intervalThatStops $以它的零件,
start$
.switchMapTo(intervalThatStops$)
.startWith(data)
是switchMapTo后,你得到的可观察会发出值。并且intervalThatStops $发出纯数字。因此,当您尝试.startWith({count:0})
时,您会看到Typescript错误,因为您的observable正在发出数字,但您正试图用一个对象({count:0})开始。
解决的办法是在使用startWith之前将intervalThatStops $映射到对象。
你可以这样做多种方式 - 一种可能性是:使用地图,你可以避开.startWith(数据),它似乎并没有解决办法很干净所有的一切我想
start$
.switchMapTo(intervalThatStops$)
.map(i => ({count: i})))
.startWith(data)
感谢您的答复我的startWith – Whisher
好吧,来自区间运算符的第一个发射是0,如你所说,你并不需要'startWith' – snorkpete