npm - RxJS Typescript: Svojstvo 'reduce' ne postoji na tipu 'Observable'


Imam ovaj mali isječak

const observable:Observable<number> = Observable.from([1, 2, 3])
  .reduce((sum: number, number: number) => {
    return sum + number
}, 0)
observable.subscribeOnNext((sum) => console.log(sum))

Radi kako se očekuje, ali Typescript prevoditelj daje ovu pogrešku:

pogreška TS2339: Svojstvo 'reduce' ne postoji na tipu 'Observable'.

Ako se reduce promijeni u scan, pogreška nestaje (= definicija scan se nalazi od strane kompajlera, ali definicija reduce nije).

Koristim npm i imam instalirane typescript (2.0.10), rx (4.1.0) i @types/rx (2.5.34).

Odgovor #1

Najnovija verzija RxJS 4 na GitHubu dodala je typings deklaraciju i odgovarajuće d.ts datoteke koje definiraju tipove za TypeScript.

Jednostavno nadogradite na najnoviju verziju uklanjanjem starih modula rx i @types/rx i pokrenite:

npm install --save Reactive-Extensions/RxJS

Obratite pažnju na sintaksu Reactive-Extensions/RxJS koja je skraćenica za korištenje izvornog koda GitHub spremišta.

Odgovor #2

Još jedna stvar koja uzrokuje ovu pogrešku je način na koji uvozite Observable. Imao sam

import {Observable} from 'rxjs/Observable'

što je uzrokovalo istu pogrešku, promjenom u

import {Observable} from 'rxjs/Rx'      

ispravno je riješio metodu reduce. Nešto drugo za provjeriti.