以下自定义RxJS运算符(实际上只是演示文件的.filter等效项)当前在Angular 4.0.0-rc.2组件中声明。
declare module 'rxjs/Observable' {
interface Observable<T> {
restrictToCommand<U>(f: (x: T) => U): Observable<U>;
}
}
Observable.prototype.restrictToCommand = function (cmd) {
return new Observable((observer) => {
const obs = {
next: (x) => {
if (x.command === cmd) {
observer.next(x);
}
},
error: (err) => observer.error(err),
complete: () => observer.complete()
};
return this.subscribe(obs);
});
};
这很好用。但是,我想将此声明提取到负责外部通信的库中。该库的主要导入是单件服务。
如何从该库中正确导出原型扩展和模块声明?
答案 0 :(得分:2)
如果库本身没有使用该操作符并且为了方便用户而存在,则它可以遵循RxJS与rxjs/add/operator/...
一起使用的方式。
操作员定义可以移动到包根目录(restrictToCommandOperator.js
和restrictToCommandOperator.d.ts
)中的单独文件中,并像
import 'packagename/restrictToCommandOperator';
应该注意的是,只有当包与版本限制没有rxjs
依赖关系时,这才能顺利运行。如果是这样,每个用户的项目可能会有多个RxJS包版本,而restrictToCommandOperator
将不会扩展所需的Observable
。