npm - RxJS تایپاسکریپت: ویژگی 'reduce' در نوع 'Observable' وجود ندارد


من این تکه کوچک را دارم

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

این همانطور که انتظار میرود کار میکند، اما کامپایلر تایپاسکریپت این خطا را تولید میکند:

خطا TS2339: ویژگی 'reduce' در نوع 'Observable' وجود ندارد.

اگر reduce به scan تغییر یابد، خطا از بین میرود (= تعریف scan توسط کامپایلر یافت میشود، اما تعریف reduce یافت نمیشود).

من از npm استفاده میکنم و TypeScript (نسخه 2.0.10)، rx (نسخه 4.1.0) و @types/rx (نسخه 2.5.34) را نصب کردهام.

پاسخ شماره ۱

آخرین نسخه RxJS 4 در گیتهاب یک اعلان typings و فایلهای d.ts مرتبط که انواع را برای TypeScript تعریف میکنند، اضافه کرده است.

به سادگی با حذف ماژولهای قدیمی rx و @types/rx و اجرای دستور زیر به آخرین نسخه ارتقا دهید:

npm install --save Reactive-Extensions/RxJS

به نحو Reactive-Extensions/RxJS توجه کنید که کوتاهشده برای استفاده از کد منبع مخزن GitHub است.

پاسخ شماره ۲

یک چیز دیگر که این خطا را ایجاد میکند نحوه وارد کردن Observable است. من داشتم

import {Observable} from 'rxjs/Observable'

که باعث همان خطا شد، با تغییر آن به

import {Observable} from 'rxjs/Rx'      

این متد reduce را به درستی حل کرد. چیز دیگری برای بررسی وجود دارد.