检查对象是否是 Observable
Check if object is an Observable
我正在使用 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
函数被添加到 public 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
using instanceof
:
if (result instanceof Observable) {
...
}
所以你可以使用:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
可用于确定对象是否是您碰巧使用的 RxJS 库中的 Observable
。
要确定对象是否是外部可观察对象,您可以look for a Symbol.observable
property。
如果 属性 存在并且是一个函数,您可以通过传递调用对象的 Symbol.observable
[=47] 返回的值从外部 observable 获得一个 RxJS Observable
=] 到 Rx.Observable.from
.
看来检查对象中的key属性还是一种检查是否可观察的方法
这里是an example used in the Nest.js Framework.
虽然,目前官方rxjs项目中正好有a type guard-like util function defined。它似乎仍在内部使用,因为我目前没有看到将此功能直接导出到主索引中。
我正在使用 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
函数被添加到 public 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
using instanceof
:
if (result instanceof Observable) {
...
}
所以你可以使用:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
可用于确定对象是否是您碰巧使用的 RxJS 库中的 Observable
。
要确定对象是否是外部可观察对象,您可以look for a Symbol.observable
property。
如果 属性 存在并且是一个函数,您可以通过传递调用对象的 Symbol.observable
[=47] 返回的值从外部 observable 获得一个 RxJS Observable
=] 到 Rx.Observable.from
.
看来检查对象中的key属性还是一种检查是否可观察的方法
这里是an example used in the Nest.js Framework.
虽然,目前官方rxjs项目中正好有a type guard-like util function defined。它似乎仍在内部使用,因为我目前没有看到将此功能直接导出到主索引中。