爲@echonax說:這意味着OR將@Rob表示,其一個Union Type
,但我開始寫這個,我不覺得把它扔了:),只是因爲我慢。 :)
首先你限制上你的方法接受觀察員
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);
}
}
與您告訴打字稿你可以叫我用行動或觀察員
......終於,這是所有更多鈔票becasue 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;
這意味着你可以用
訂閱
但總是會返回一個認購
例如:
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);
}
}
來源
2016-12-22 07:18:30
Dan
亦稱打字稿中的[union type](https://www.typescriptlang.org/docs/handbook/advanced-types.html) – Rob
優秀!現在完全明顯。由於Angular 2,我一直在思考「管道」,而不是「OR」,這就是我爲什麼遇到問題的原因。非常感謝! –
@CarlosMuentes哈哈,沒問題。很高興你知道了:) – echonax