Я пытаюсь реализовать собственный оператор RxJS, как описано в этом ответе. Вот соответствующие фрагменты в моем приложении:
rxjs-extensions.ts
import { Observable } from 'rxjs/Observable';
function restrictToCommand<T>(this: Observable<T>): Observable<T> {
console.log('works');
return Observable.empty()
}
declare module 'rxjs/Observable' {
interface Observable<T> {
restrictToCommand: typeof restrictToCommand;
}
}
Observable.prototype.restrictToCommand = restrictToCommand;
потребитель.ts
import { Observable } from 'rxjs/Observable';
import '../../rxjs-extensions';
...
export class MyComponent {
...
private load(): void {
Observable.of(1).restrictToCommand();
}
...
}
Когда вызывается load()
, я получаю следующее исключение:
EXCEPTION: Uncaught (in promise): Error: Error in ./MyParentComponent class MyParentComponent - inline template:2:4 caused by: __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__.Observable.of(...).restrictToCommand is not a function
TypeError: __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__.Observable.of(...).restrictToCommand is not a function
at MyComponent .load (eval at <anonymous> (http://localhost:8080/app.js:3530:1), <anonymous>:45:75)
at MyComponent .ngOnInit (eval at <anonymous> (http://localhost:8080/app.js:3530:1), <anonymous>:63:14)
at Wrapper_MyComponent .ngDoCheck (/AppModule/JobsPanelComponent/wrapper.ngfactory.js:22:53)
at CompiledTemplate.proxyViewClass.View_MyParentComponent 0.detectChangesInternal (/AppModule/MyParentComponent/component.ngfactory.js:62:32)
at CompiledTemplate.proxyViewClass.AppView.detectChanges (eval at <anonymous> (http://localhost:8080/app.js:3185:1), <anonymous>:301:14)
at CompiledTemplate.proxyViewClass.DebugAppView.detectChanges (eval at <anonymous> (http://localhost:8080/app.js:3185:1), <anonymous>:394:44)
at CompiledTemplate.proxyViewClass.View_MyParentComponentt_Host0.detectChangesInternal (/AppModule/MyParentComponent/host.ngfactory.js:29:19)
at CompiledTemplate.proxyViewClass.AppView.detectChanges (eval at <anonymous> (http://localhost:8080/app.js:3185:1), <anonymous>:301:14)
at CompiledTemplate.proxyViewClass.DebugAppView.detectChanges (eval at <anonymous> (http://localhost:8080/app.js:3185:1), <anonymous>:394:44)
at ViewRef_.detectChanges (eval at <anonymous> (http://localhost:8080/app.js:1708:1), <anonymous>:136:20)
Я использую Angular 2, Webpack 2 и TypeScript 2.0.3.
load
, чтобы точно увидеть, что такоеObservable.prototype.restrictToCommand
в этот момент. - person cartant   schedule 10.03.2017console.log(Observable.of(1).restrictToCommand);
показывает мне, чтоrestrictToCommand
не определено... - person Dustin Cleveland   schedule 10.03.2017../../
. Код вrxjs-extensions.ts
выглядит нормально, поэтому, если после его импорта прототипObservable
не содержитrestrictToCommand
, я предполагаю, что вокруг плавает несколько модулей RxJS. Запуститеnpm list rxjs
, чтобы проверить, сможет ли он найти более одного модуля. - person cartant   schedule 10.03.2017import './rxjs-extensions';
в свой файлapp.module.ts
, в который я уже импортировал./rxjs-imports
. Кажется, это решило проблему! Теперь понятно почему... :) - person Dustin Cleveland   schedule 10.03.2017