web-dev-qa-db-fra.com

Le type 'boolean' n'est pas assignable au type 'Observable <boolean>'

J'ai ce code

method(): Observable<boolean> {
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
}

Mais quand sessionId est '', il lève une exception et la console enregistre une erreur 401

et j'ajoute si à l'intérieur de cette méthode:

method(): Observable<boolean> {
    if (sessionId === '')
      return false;
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
  }

Mais maintenant je reçois une erreur:

Le type 'booléen' n'est pas assignable au type 'Observable'.

Comment puis-je résoudre ça?

Si j'ajoute Observable<boolean> | boolean alors je reçois une erreur qui

La propriété 'map' n'existe pas sur le type 'boolean | Observable'.

17
gsiradze
method(): Observable<boolean> {
    if (sessionId === '')
      return false; // <<< obviously not an observable

Cela devrait faire ce que tu veux

method(): Observable<boolean> {
    if (sessionId === '')
      return Observable.of(false);
    }
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
  }
26
Günter Zöchbauer

En plus de la réponse acceptée, je voudrais ajouter le cas v6 de RxJs où of n'existe pas sur Observable mais peut être importé directement de rxjs:

import { Observable, of as observableOf } from 'rxjs'; // since RxJs 6

method(): Observable<boolean> {
  if (sessionId === '')
    return observableOf(false);
  }
  // ...
}
8
dhilt