【问题标题】:Type 'Observable<boolean | "">' is not assignable to type 'Observable<boolean>' TS2322输入'可观察的<布尔值 | "">' 不可分配给类型 'Observable<boolean>' TS2322
【发布时间】:2020-01-06 12:17:02
【问题描述】:

我从 NgRx 商店 @ngrx/store": "7.3.0" 中选择。

// typeof state.id == string

export const selectIsSomethingPresent = createSelector(selector, state => {
  // standard null check
  return state.id && state.id !== "12345";
});

我将它分配给一个 Observable

isSomethingPresent$ !: Observable<boolean>;

someMethod() {
  this.isSomethingPresent$ = this.store.select(selectIsSomethingPresent);
}

我收到此错误:

Type 'Observable&lt;boolean | ""&gt;' is not assignable to type 'Observable&lt;boolean&gt;'.

为什么打字稿会这样?

fyi return ("12345" &amp;&amp; true) 抛出同样的错误。

【问题讨论】:

    标签: javascript angular typescript ngrx


    【解决方案1】:

    因为state.id 类型是string,所以空字符串&& true 将返回一个空字符串而不是布尔值,因此您需要将state.id 转换为boolean

    return Boolean(state.id) && state.id !== "12345";
    

    【讨论】:

    • 他们为什么return "12345" &amp;&amp; true 会抛出同样的错误?
    • @KacperCieluch 见stackoverflow.com/questions/12693787/…。请注意,您可以使用 !!state.id 而不是 Boolean(state.id)
    • @AndrewAllen IMO 使用 Boolean() 然后 !! 更具可读性
    猜你喜欢
    • 2021-08-17
    • 2016-11-12
    • 2020-05-23
    • 2023-01-18
    • 2019-04-22
    • 1970-01-01
    • 2017-12-18
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多