RXJS中的startWith运算符真的过时了吗?

时间:2019-06-12 23:06:02

标签: javascript typescript rxjs

自从更新到RXJS版本6以来,我的WebStorm编辑器一直在抱怨startWith()某些用法中,该操作符被标记为已弃用

您可以在源代码中看到这些方法已标记为不赞成使用:

对我来说,问题是不赞成使用的警告不一致。有时它报告不推荐使用的方法,而其他时候则不报告。虽然我可以在以下代码示例中重现警告。这似乎是在我自己的源代码中随机发生的。

不推荐使用:

  of(false).pipe(startWith(true));

已标记为已弃用:

  const x: any = true;
  of(false).pipe(startWith(x));

因此,我担心这些已过时的警告。弃用消息说使用scheduled()concat()运算符来代替,但是对于像startWith()这样已经很方便的运算符来说,这似乎是一个更复杂的选择。

所以我对为什么不推荐使用它感到困惑,但是为什么有时只不推荐使用它。

4 个答案:

答案 0 :(得分:18)

不,不是。

当前只有一个活动签名:startWith(...values)

除此签名外,它还有几个重载,它们将scheduler: SchedulerLike作为最新参数:startWith(...values, scheduler),并且不建议使用此功能。

如果您不将schedulerstartWith一起使用,则可以。例如,startWith(null)尽管有通知也没有被弃用。

如果这样做,则需要使用scheduled函数来重写代码,就像它们在折旧注释scheduled([[a, b, c], source], scheduler).pipe(concatAll())旁的注释中所建议的那样。

答案 1 :(得分:1)

避免过时通知的一种方法是通过类型转换将传递给startWith的内容。例如,OP的示例中的startwith(x as boolean)

通过这种方式,您可以确保TypeScript没有使用不推荐使用的签名。

答案 2 :(得分:0)

当我尝试startWith(undefined)时,我也收到了不赞成使用的消息 原因是它默认为 export declare function startWith<T>(scheduler: SchedulerLike): MonoTypeOperatorFunction<T>;已弃用的API

修复程序指定了返回类型D(未定义): export declare function startWith<T, D>(v1: D): OperatorFunction<T, T | D>;

例如,假设我有接口MyType1,而我的观察对象将其映射到myType2startWith<MyType1, MyType1>(undefined)

答案 3 :(得分:0)

对于在使用 startWith(null) 时在 VSCode 中看到已弃用警告的用户,只需将其替换为 startWith(<string>null) 即可解决警告消息。

更多信息是here