【问题标题】:error TS2339: Property 'partition' does not exist on type 'Observable<boolean>'错误 TS2339: 属性 'partition' 在类型 'Observable<boolean>' 上不存在
【发布时间】:2019-10-29 17:44:58
【问题描述】:

之前我使用的是 rxjs-5,我使用 observable.partition 如下:

const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
        .partition(value => value);

升级angular8 rxjs 升级到rxjs-6 后开始抛出以下错误:

 providers/timer.provider.ts(27,5): error TS2339: Property 'partition' does not exist on type 'Observable<boolean>'.

当我签入旧的 rxjs 实现时,它的实现如下:

  import { Observable } from '../Observable';
  import { partition as higherOrder } from '../operators/partition';
  /**
   * Splits the source Observable into two, one with values that satisfy a
   * predicate, and another with values that don't satisfy the predicate.
   */
   export function partition<T>(this: Observable<T>, predicate: (value: T, index: number) => boolean, thisArg?: any): [Observable<T>, Observable<T>] {
    return higherOrder(predicate, thisArg)(this);
  }

【问题讨论】:

    标签: angular observable rxjs5 rxjs6 angular8


    【解决方案1】:

    看到github conversion之后

    我认为我们应该弃用分区运算符并在 v7 中将其删除。

    原因:

    • 不是真正的运算符:partition 并不是真正的“运算符”,因为它返回 [Observable, Observable] 而不是 Observable。这意味着它不像其他的那样通过管道组成。

    • 很容易用过滤器替换:分区很容易用更广为人知的过滤器操作符替换。由于分区实际上与以下内容相同:const partition = (predicate) =&gt; [source.pipe(filter(predicate)), source.pipe(filter((x, i) =&gt; !predicate(x, i)))]

    在你的情况下:

    import {filter} = "rxjs/operators"
    const source = this.store.select(state => state.tetris.isTiming);
    const partition = (predicate) => [source.pipe(filter(predicate)), source.pipe(filter((x, i) => !predicate(x, i)))]
    
    const [isTiming$, isNotTiming$] = partition(value => value);
    
    • 很少使用:在我进行的任何代码调查中都很少使用(在我知道使用 RxJS 的数千行代码中)

    【讨论】:

      【解决方案2】:

      你应该使用 Observable 方法pipe,像这样:

      const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
              .pipe(
                  partition(value => value);
              )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2018-11-03
        • 2019-03-02
        • 2018-01-14
        相关资源
        最近更新 更多