声明合并在 Angular 2 项目中不起作用

Declaration Merging not Working in Angular 2 Project

我正在尝试实现 中描述的自定义 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;

consumer.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。

您是否添加了 Observable.of 运算符?

在您的 rxjs-extensions 模块中,

import 'rxjs/add/observable/of';

要解决此问题,我必须将 import './rxjs-extensions' 添加到我的 app.module.ts,我已经在其中导入了 ./rxjs-imports,该文件包含我之前使用的所有 RXJS 运算符在我的应用程序中使用。

不幸的是,我仍然不完全理解发生了什么。如果我有更清晰的理解,我会更新答案。