【问题标题】:error TS2339: Property 'timer' does not exist on type 'typeof Observable'. 'switchMap' and 'takeUntil' breaks the flow错误 TS2339:“typeof Observable”类型上不存在属性“timer”。 “switchMap”和“takeUntil”中断流程
【发布时间】:2019-06-15 22:10:09
【问题描述】:

移至 angular8、rxjs6。计时器、switchMap、combineLatest、方法中断。尝试解决 combineLatest 或 Timer 属性会破坏其他属性的流程。

最初的代码在分区中断,修复它error TS2339: Property 'partition' does not exist on type 'Observable<boolean>'

      init(): void {
        const source = this.store.select(state => state.tether.isTiming);
        const partition = (predicate) => [source.pipe(filter(predicate)), source.pipe(filter((x, i) => !predicate(x, i)))]

        const [isTiming$, isNotTiming$] = partition(value => value);

        const partialInterval$ = this.store.select(state => state.tether.partialInterval);
        const interval$ = this.store.select(state => state.tether.interval);


                  isTiming$
        .combineLatest(interval$, (isTiming, interval) => interval)
        .withLatestFrom(partialInterval$)
        .switchMap(([interval, partialInterval]) => {
            return timer(partialInterval, interval)
                .takeUntil(isNotTiming$);
        })
        .subscribe(() => {
            this.store.dispatch(softDrop(true));
        });

      }

用管道中断重写它。

    isTiming$
        .combineLatest(interval$, (isTiming, interval) => interval)
        .withLatestFrom(partialInterval$)
        .switchMap(([interval, partialInterval]) => {
            return timer(partialInterval, interval)
                .takeUntil(isNotTiming$);
        })
        .subscribe(() => {
            this.store.dispatch(softDrop(true));
        });

错误 TS2339:“typeof Observable”类型上不存在属性“timer”。

错误 TS2339:“Observable”类型上不存在属性“combineLatest”。

错误 TS2339:“可观察”类型上不存在属性“withLatestFrom”。

【问题讨论】:

    标签: angular typescript rxjs


    【解决方案1】:

    现在在新的 RX-6 中,timercombineLatest 现在是 rxjs 核心模块的一部分,withLatestFromrxjs/operators 模块下可用

    请参阅:timer, combineLatestwithLatestFrom

    在您的情况下,以下实施将起作用

    init(): void {
        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);
    
            const partialInterval$ = this.store.select(state => state.tetris.partialInterval);
            const interval$ = this.store.select(state => state.tetris.interval);
    
    
                combineLatest(interval$, (isTiming, interval) => interval).pipe(
                  withLatestFrom(partialInterval$), switchMap(([interval, partialInterval]) => {
              return timer(partialInterval, 1000).pipe(takeUntil(isNotTiming$));
          })
            )
                .subscribe(() => {
                    this.store.dispatch(softDrop(true));
                });
    
        }
    

    【讨论】:

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