Ответ 1
После написания этого ответа была выпущена версия 6 RxJS, и в этой версии в общедоступный API была добавлена функция isObservable
. Это можно импортировать так:
import { isObservable } from "rxjs";
Сигнатура функции:
export function isObservable<T>(obj: any): obj is Observable<T>
Так как он определен с помощью typeguard, компилятор может помочь вам так:
const result: any = ...;
if (isObservable(result))
{
result.pipe(...); // compiler now knows it an observable.
}
Внутри RxJS тестирует Observable
используя instanceof
:
if (result instanceof Observable) {
...
}
Таким образом, вы можете использовать:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
может использоваться для определения того, является ли объект Observable
из библиотеки RxJS, которую вы используете.
Чтобы определить, является ли объект Symbol.observable
наблюдаемой, вы можете найти свойство Symbol.observable
.
Если свойство присутствует и является функцией, вы можете получить RxJS Observable
от иностранного наблюдаемым, передавая значение, возвращаемого вызовом объекта Symbol.observable
свойства Rx.Observable.from
.