@ekonaxが言ったように:@Robがユニオンタイプだと言ったようにORを意味します
しかし、私はこれを書き始めましたが、それを捨てる気がしません:)、単に私が遅いからです。:)
最初に、オブザーバーを受け入れるように yuor メソッドを制限しました
class SubscribeMe<T> {
observable: Observable<T>;
susbscribe(observer: Observer<T>){
return observable.susbscribe(observer);
}
}
次に、アクションが似ている署名のようなアクションでそれを呼び出そうとしました
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」のオーバーロードされた署名を定義します
* 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);
}
}