You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 6升级后ng lint提示combineLatest已弃用,如何解决?

嘿,这个问题我熟!RxJS 6在操作符的使用上做了不少规范调整,刚好踩过类似的坑,给你捋清楚怎么改:

首先,你遇到的第一个警告是因为RxJS 6彻底移除了操作符的resultSelector参数——也就是原来那种把回调函数直接放在combineLatest参数里的写法已经被弃用了,必须改用pipe搭配map操作符来处理结果。

然后第二个警告是因为你用了实例版的combineLatest(也就是在pipe里直接调用的那个),RxJS 6已经弃用了实例方法的combineLatest,推荐使用静态版本的combineLatest;另外empty()也确实被弃用了,现在要换成大写的EMPTY常量(不过其实你这个场景根本不需要用到空Observable,后面细说)。

正确的写法应该是这样:

先确保导入正确的操作符和方法:

import { combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';

然后把原来的代码改成静态combineLatest+pipe(map)的形式:

const a$ = combineLatest(
  this.aStore.select(b.getAuth),
  this.cStore.select(b.getUrl)
).pipe(
  map(([auth, url]) => ({ auth, url }))
);

为啥这么改?

  1. 静态combineLatest:RxJS 6推荐优先使用静态方法来组合多个Observable,实例版的combineLatest因为容易混淆行为被标记为弃用。
  2. 用map替代结果选择器:所有需要对Observable结果做转换的逻辑,都统一放到pipe里的map操作符中,这是RxJS 6的规范,让代码的数据流更清晰。

如果你确实需要在pipe链中组合Observable(比如前面还有其他操作):

比如你有一个上游的Observable,要和另外两个Store的Observable组合,那可以这样写:

import { combineLatest, of } from 'rxjs';
import { map, mergeMap } from 'rxjs/operators';

// 假设上游有一个source$
source$.pipe(
  // 用mergeMap把上游值和另外两个Observable组合
  mergeMap(sourceVal => combineLatest(
    of(sourceVal),
    this.aStore.select(b.getAuth),
    this.cStore.select(b.getUrl)
  )),
  // 再用map处理组合后的结果
  map(([sourceVal, auth, url]) => ({ sourceVal, auth, url }))
);

另外关于empty()的替代:现在直接导入EMPTY常量即可,它是一个已经创建好的空Observable,用法如下:

import { EMPTY } from 'rxjs';

// 比如需要返回一个空Observable的场景
someFunction(): Observable<any> {
  if (someCondition) {
    return EMPTY;
  }
  // ...其他逻辑
}

这样改完之后,两个警告应该就都消失啦!

内容的提问来源于stack exchange,提问作者Phaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:51