在Angular库中导出自定义RxJS运算符

时间:2017-03-08 14:21:21

标签: angular typescript rxjs

以下自定义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);
  });
};

这很好用。但是,我想将此声明提取到负责外部通信的库中。该库的主要导入是单件服务。

如何从该库中正确导出原型扩展和模块声明?

1 个答案:

答案 0 :(得分:2)

如果库本身没有使用该操作符并且为了方便用户而存在,则它可以遵循RxJS与rxjs/add/operator/...一起使用的方式。

操作员定义可以移动到包根目录(restrictToCommandOperator.jsrestrictToCommandOperator.d.ts)中的单独文件中,并像

一样导入
import 'packagename/restrictToCommandOperator';

应该注意的是,只有当包与版本限制没有rxjs依赖关系时,这才能顺利运行。如果是这样,每个用户的项目可能会有多个RxJS包版本,而restrictToCommandOperator将不会扩展所需的Observable