TypeScript,是否可以在现有库(rxjs)上强制使用函数签名

时间:2017-02-13 01:54:45

标签: typescript rxjs observable

所以我想强迫自己总是在rxjs的订阅上放错误函数。所以我希望添加一个界面,例如:

Observable.prototype.sub = Observable.prototype.subscribe;

所以我正在制作订阅的副本,并继续但不知何故使用TypeScript强制sub让一个接口总是需要提供符合的函数

var subscription = source.subscribe(
  x => console.log('onNext: %s', x),
  e => console.log('onError: %s', e),
  () => console.log('onCompleted')
);

这样,当我使用新创建的sub运算符

时,我无法忘记传递错误函数(以及可选的完整函数)

问候

肖恩

1 个答案:

答案 0 :(得分:1)

是的。扩展Observable的TypeScript界面​​以包含sub方法非常容易。

将此内容添加到sub.ts文件中:

import { Observable } from "rxjs/Observable";
import { PartialObserver } from "rxjs/Observer";
import { AnonymousSubscription } from "rxjs/Subscription";

Observable.prototype.sub = Observable.prototype.subscribe;

declare module "rxjs/Observable" {
  interface Observable<T> {
    sub: (
      observerOrNext: PartialObserver<T> | ((value: T) => void),
      error: (error: any) => void,
      complete?: () => void
    ) => AnonymousSubscription;
  }
}

并按照这样消费:

import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/of";
import "./sub";

Observable
  .of(1)
  .sub(value => console.log(value));

上面的代码段不包含错误处理程序,因此它会影响&#34;提供的参数与调用目标的任何签名都不匹配&#34; 错误。

仅供参考,我已根据此signature for subscribesub签名。