RXJS 中的 startWith 运算符真的被弃用了吗?

新手上路,请多包涵

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

您可以在源代码中看到这些方法被标记为已弃用:

我的问题是弃用警告不一致。有时它会报告已弃用的方法,有时则不会。虽然我可以在下面的代码示例中重现警告。它似乎随机发生在我自己的源代码中。

不弃用:

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

被标记为已弃用:

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

所以我很担心这些已弃用的警告。弃用消息说要使用 scheduled()concat() 运算符,但这感觉像是一个更复杂的替代方案,而不是像 startWith() 这样的已经很方便的运算符

所以我有点困惑为什么它被弃用,但也为什么它有时只是被弃用。

原文由 Reactgular 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

不它不是。

目前只有一个有效签名: startWith(…values)

除了这个签名之外,它还有几个重载接受 scheduler: SchedulerLike 作为最新参数: startWith(…values, scheduler) 并且这个功能已经被弃用。

如果你不使用 schedulerstartWith 你没问题。

如果你这样做,那么你需要使用 scheduled 功能重写你的代码,就像他们在折旧注释旁边的评论中建议的那样: scheduled([[a, b, c], source], scheduler).pipe(concatAll())


很有可能,您正在使用 startWith(null)startWith(undefined) ,尽管有通知,但它们并未弃用,但 IDE 检测到错误的函数签名,该签名已弃用,并显示警告。

或者,您正在使用 formControl.valueChanges 发出 any 类型,或任何其他带有 any 的可观察流。因为 any 匹配 SchedulerLike ,您会看到通知。

因此,尽量避免 any 通过添加 filter((v): v is number => typeof === 'number') 或任何其他可能的方式。

原文由 satanTime 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

更多信息在 这里

原文由 Anh-Thi DINH 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题