私はRxJS 5を使用していますが、この方法があります:
Queue.prototype.drain = function (obs, opts) {};
このメソッドでは、ユーザーが最初の引数にObservable
を渡したかどうか、またはObservable
を省略してオプションオブジェクトを渡しただけかどうかを確認したいと思います。
だから基本的に私はこのようなことをする必要がある:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
RxJSがこの種のチェックをユーザーに提供すると仮定しますが、このタイプチェックの実行方法を示すドキュメントが見つかりません。
誰もが知っていますか?
この回答を書いてから、RxJSバージョン6がリリースされ、そのバージョンでは isObservable
関数がパブリックAPIに追加されました。次のようにインポートできます。
import { isObservable } from "rxjs";
関数のシグネチャは次のとおりです。
export function isObservable<T>(obj: any): obj is Observable<T>
タイプガードで定義されているため、コンパイラは次のように支援します。
const result: any = ...;
if (isObservable(result))
{
result.pipe(...); // compiler now knows it's an observable.
}
内部的に、RxJSはObservable
をテストします instanceof
を使用 :
if (result instanceof Observable) {
...
}
だからあなたは使用することができます:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
を使用して、オブジェクトが使用しているRxJSライブラリのObservable
であるかどうかを判断できます。
オブジェクトが外部のオブザーバブルかどうかを判断するには、 Symbol.observable
プロパティを探します を使用します。
プロパティが存在し、関数である場合、オブジェクトのSymbol.observable
プロパティを呼び出して返された値をRx.Observable.from
に渡すことにより、外部オブザーバブルからRxJS Observable
を取得できます。
オブジェクトのキープロパティを確認することは、それが観察可能かどうかを確認するためのアプローチであるようです。
ただし、現在、公式のrxjsプロジェクトには 定義されたタイプガードのようなutil関数 があります。現在この関数をメインインデックスに直接エクスポートしていないため、内部で使用されているようです。