2017-02-13 173 views
1

函数签名,所以我想强迫自己总是把一个错误函数rxjs的订阅。所以,我想补充的接口,是这样的:TypeScript,是否有可能强制现有库(rxjs)

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

所以我提出认购的副本,并继续进行,但不知何故使用打字稿迫使sub为具有总是需要提供功能的接口符合

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

这样,我就无法忘记传递误差函数(和可选的完整功能),当我用我的新创建sub操作

关于

肖恩

回答

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)); 

上面的代码中不包含错误处理程序,所以它会影响一个“提供参数不匹配呼叫目标“”错误的任何签名。

仅供参考,我已根据此signature for subscribe上的sub签名。

+0

谢谢sooooooo多!!!!!! – born2net

相关问题