正如@echonax 所说:这意味着或正如@Rob 所说的它是联合类型
但我开始写这篇文章,我不想把它扔掉:),只是因为我很慢。:)
第一个你限制你接受观察者的方法
class SubscribeMe<T> {
observable: Observable<T>;
susbscribe(observer: Observer<T>){
return observable.susbscribe(observer);
}
}
然后您尝试使用类似 Action 的签名来调用它,其中 Action 就像
type Action = <T>(t:T)=> void
通过做 :
susbscribeMe = new SubscribeMe<any>();
susbscribeMe.susbscribe((x)=> console.log(x));
这与之前提供的签名不匹配。
然后你在方法中添加了类似签名的动作
class SubscribeMe<T> {
observabel: Observable<T>
susbscribe(observer: Observer<T>| (x)=> void ){
return observable.susbscribe(observer);
}
}
或者...
class SubscribeMe<T> {
observabel: Observable<T>
susbscribe(observer: Observer<T>| Action<T>){
return observable.susbscribe(observer);
}
}
有了那个你告诉打字稿你可以用行动或观察者打电话给我
...最后这一切都是可能的,因为 Rx.Observable 接口 (rxjs/Observable.d.ts)
为“订阅”定义一个重载签名,如下所示
* subscribe(): Subscription;
* subscribe(observer: PartialObserver<T>): Subscription;
* subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
这意味着您可以订阅
- 或一个动作
- 或观察员
- 或 Null/Nothing/Nada
但总是会返回一个订阅
前任:
import * as Rx from "rxjs";
export class SubscribeMe<T> {
private _events = new Rx.Subject<T>();
/**
* Hide the source of the observable
* */
get events(): Rx.Observable<T> { return this._events.asObservable(); }
/**
* Accept any signature accepted by Rx.Observabe INTERFACE (rxjs/Observable.d.ts)
* subscribe(): Subscription;
* subscribe(observer: PartialObserver<T>): Subscription;
* subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
*
* as in OR Action<Ievent> Or Observer<Ievent> Or Null/Nothing/Nada
*/
subscribe = (observer?: (e:T) => void | Rx.Observer<T>) => {
return this.events.subscribe(observer);
}
}