J'utilise RxJS 5 et j'ai cette méthode:
Queue.prototype.drain = function (obs, opts) {};
dans la méthode, je voudrais vérifier si l'utilisateur a passé un Observable
pour le premier argument ou s'il a omis le Observable
et vient de passer un objet options.
Donc, fondamentalement, je dois faire quelque chose comme ça:
if(!Rx.Observable.isObservable(obs)){ //this method is fictitious
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
Je suppose que RxJS fournit aux utilisateurs ce type de vérification, mais je ne trouve pas la documentation qui vous montre comment effectuer cette vérification de type.
Quelqu'un sait comment?
Depuis l'écriture de cette réponse, RxJS version 6 a été publiée et, dans cette version, une fonction isObservable
a été ajoutée à l'API publique. Il peut être importé comme ceci:
import { isObservable } from "rxjs";
La signature de la fonction est:
export function isObservable<T>(obj: any): obj is Observable<T>
Puisqu'il est défini avec un typeguard, le compilateur peut vous aider comme ceci:
const result: any = ...;
if (isObservable(result))
{
result.pipe(...); // compiler now knows it's an observable.
}
En interne, RxJS teste un Observable
en utilisant instanceof
:
if (result instanceof Observable) {
...
}
Vous pouvez donc utiliser:
if (!(obs instanceof Rx.Observable)) {
opts = obs || {};
obs = Rx.Observable.interval(1000);
}
instanceof
peut être utilisé pour déterminer si un objet est un Observable
de la bibliothèque RxJS que vous utilisez.
Pour déterminer si l'objet est un observable étranger, vous pouvez recherchez une propriété Symbol.observable
.
Si la propriété est présente et est une fonction, vous pouvez obtenir un RxJS Observable
à partir de l'observable étranger en transmettant la valeur renvoyée en appelant la propriété Symbol.observable
De l'objet à Rx.Observable.from
.
Il semble que la vérification de la propriété key dans l'objet soit toujours une approche pour vérifier si elle est observable.
Voici n exemple utilisé dans le cadre Nest.js .
Bien qu'il y ait exactement ne fonction util de type garde définie dans le projet rxjs officiel actuellement. Il semble toujours être utilisé en interne car je ne vois pas d'exportation directe de cette fonction dans l'index principal actuellement.