自从更新到RXJS版本6以来,我的WebStorm编辑器一直在提示startWith()的某些用法,该操作符被标记为已弃用。
您可以在源代码中看到这些方法被标记为已弃用:
对我来说,问题是不建议使用的警告不一致。有时它报告不推荐使用的方法,而其他时候则不报告。虽然我可以在以下代码示例中重现警告。这似乎是在我自己的源代码中随机发生的。
不推荐使用:
of(false).pipe(startWith(true));
标记为已弃用:
const x: any = true;
of(false).pipe(startWith(x));
因此,我担心这些已过时的警告。弃用消息说改为使用
scheduled()
和concat()
运算符,但是对于像startWith()
这样已经很方便的运算符,这感觉像是一个更复杂的选择。因此,我对于为什么不推荐使用它感到困惑,但是为什么有时只推荐不推荐使用它。
最佳答案
不它不是。
当前只有一个 Activity 签名: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')
。