Javascript 检查对象是否为可观察对象

Javascript 检查对象是否为可观察对象,javascript,rxjs,rxjs5,Javascript,Rxjs,Rxjs5,我使用的是RxJS 5,有以下方法: Queue.prototype.drain = function (obs, opts) {}; 在这个方法中,我想检查用户是否为第一个参数传入了一个可观察的,或者他们是否省略了可观察的,只是传入了一个options对象 所以基本上我需要这样做: if(!Rx.Observable.isObservable(obs)){ //this method is fictitious opts = obs || {}; obs = Rx.Obse

我使用的是RxJS 5,有以下方法:

Queue.prototype.drain = function (obs, opts) {};
在这个方法中,我想检查用户是否为第一个参数传入了一个
可观察的
,或者他们是否省略了
可观察的
,只是传入了一个options对象

所以基本上我需要这样做:

if(!Rx.Observable.isObservable(obs)){  //this method is fictitious
    opts = obs || {};
    obs = Rx.Observable.interval(1000);
}
我假设RxJS为用户提供了这种检查,但是我找不到说明如何进行这种类型检查的文档


有人知道怎么做吗?

写下这个答案后,RxJS版本6已经发布,在该版本中,一个函数被添加到公共API中。它可以按如下方式导入:

if(!Rx.Observable.isObservable(obs)){  //this method is fictitious
    opts = obs || {};
    obs = Rx.Observable.interval(1000);
}
从“rxjs”导入{isObservable};
函数签名为:

导出功能isObservable(obj:any):obj是可观察的
因为它是用typeguard定义的,所以编译器可以像这样帮助您:

if(!Rx.Observable.isObservable(obs)){  //this method is fictitious
    opts = obs || {};
    obs = Rx.Observable.interval(1000);
}
const result:any=。。。;
if(可服务(结果))
{
result.pipe(…);//编译器现在知道它是可观察的。
}

在内部,RxJS测试一个
可观察的

if(可观察的结果实例){
...
}
因此,您可以使用:

if(!(obs接收实例可观察)){
opts=obs |{};
obs=接收可观测间隔(1000);
}

instanceof
可用于确定对象是否是您正在使用的RxJS库中的可观察对象

要确定该对象是否为外来可观察对象,您可以


如果属性存在并且是函数,通过将调用对象的
符号.Observable
属性返回的值传递给
Rx.Observable,您可以从外部Observable中获得RxJS
Observable
。从
中,检查对象中的键属性似乎仍然是检查其是否可观察的一种方法

这是


尽管如此,目前rxjs官方项目中确实存在一些问题。它似乎仍然在内部使用,因为我目前看不到直接将此函数导出到主索引中。

if(isObservable(obj)){console.log(“observable”)}我听说在比较跨iFrame运行的代码时,
instanceof
操作符可能会中断,如果构造函数ref不完全相同,则有意义。我假设
isObservable的实现可以处理这个问题。
!!obj&&
可能不是必需的,可以只做
obj&&
唯一的
位于您的注释中。