自从更新到 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 许可协议
不它不是。
目前只有一个有效签名: startWith(…values)
除了这个签名之外,它还有几个重载接受
scheduler: SchedulerLike
作为最新参数: startWith(…values, scheduler) 并且这个功能已经被弃用。如果你不使用
scheduler
和startWith
你没问题。如果你这样做,那么你需要使用
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')
或任何其他可能的方式。