【问题标题】:Type 'boolean' is not assignable to type 'Observable<boolean>'类型 'boolean' 不可分配给类型 'Observable<boolean>'
【发布时间】:2017-06-29 22:09:21
【问题描述】:

我有那个代码

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

但是当 sessionId 为 '' 时,它会抛出异常并控制台记录 401 错误

我在该方法中添加 if:

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

但现在我收到一个错误:

类型 'boolean' 不可分配给类型 'Observable'。

我该如何解决?

如果我添加 Observable&lt;boolean&gt; | boolean 那么我会收到错误

“boolean | 类型”上不存在属性“map”可观察的'。

【问题讨论】:

标签: angular observable


【解决方案1】:
method(): Observable<boolean> {
    if (sessionId === '')
      return false; // <<< obviously not an observable

这应该做你想做的事

import { of, Observable } from 'rxjs';


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

【讨论】:

  • 对于 Angular 6+,它现在是 of() 而不是 Observable.of()
【解决方案2】:

除了接受的答案之外,我还会添加 RxJs v6 案例,其中 of 不存在于 Observable 但可以直接从 rxjs 导入:

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

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

【讨论】:

    【解决方案3】:

    对于具有 STRICT TYPE 设置的 Angular 用户,所有其他类型似乎都可以正常工作(不是我测试了所有类型...而是数字和自定义接口,例如在没有添加类型声明的情况下工作)

    使用布尔类型,这会导致错误:

    _isBoolean$: BehaviorSubject<boolean> = new BehaviorSubject(false);
    

    改成这样:

    _isBoolean$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
    

    这也有效...

    _isBoolean$ = new BehaviorSubject<boolean>(false);
    _isBoolean$ = new BehaviorSubject(false);
    

    但是,很明显,它删除了...严格...打字;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多