错误 TS2339:属性 'partition' 在类型 'Observable<boolean>' 上不存在
error TS2339: Property 'partition' does not exist on type 'Observable<boolean>'
之前我使用的是 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);
}
我认为我们应该弃用分区运算符并将其从 v7 中删除。
原因:
不是真正的运算符:分区不是真正的 "operator" 因为它 returns [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 的数千行代码中)
我想你应该使用 Observable 方法 pipe
,像这样:
const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
.pipe(
partition(value => value);
)
之前我使用的是 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);
}
我认为我们应该弃用分区运算符并将其从 v7 中删除。
原因:
不是真正的运算符:分区不是真正的 "operator" 因为它 returns [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 的数千行代码中)
我想你应该使用 Observable 方法 pipe
,像这样:
const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
.pipe(
partition(value => value);
)