ошибка TS2339: не существует свойства 'partition' для типа 'Observable <boolean>' - PullRequest
3 голосов
/ 15 июня 2019

Ранее я использовал rxjs-5 и использовал observable.partition следующим образом:

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

После обновления angular до 8 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);
  }

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

После просмотра преобразования github

Я думаю, что мы должны отказаться от оператора раздела и удалить его для v7.

Причины:

  • Не совсем оператор: разделение на самом деле не является «оператором» в том смысле, что оно возвращает [Observable, Observable], а не Observable.Это означает, что он не создает через канал, как другие.

  • Легко заменить фильтром: раздел легко заменяется гораздо более известным оператором фильтра.В качестве раздела фактически используется то же самое, что и: const partition = (predicate) => [source.pipe(filter(predicate)), source.pipe(filter((x, i) => !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 голосов
/ 15 июня 2019

Я гость, вы должны использовать метод Observable pipe, что-то вроде этого:

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