2017-03-05 130 views
0

有了這個代碼類型'{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) 

但什麼是正確的做法嗎?

在此先感謝

回答

2

從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) 
+0

感謝您的答覆我的startWith – Whisher

+0

好吧,來自區間運算符的第一個發射是0,如你所說,你並不需要'startWith' – snorkpete

相關問題