自从更新到RXJS版本6以来,我的WebStorm编辑器一直在抱怨startWith()的某些用法中,该操作符被标记为已弃用。
您可以在源代码中看到这些方法已标记为不赞成使用:
对我来说,问题是不赞成使用的警告不一致。有时它报告不推荐使用的方法,而其他时候则不报告。虽然我可以在以下代码示例中重现警告。这似乎是在我自己的源代码中随机发生的。
不推荐使用:
of(false).pipe(startWith(true));
已标记为已弃用:
const x: any = true;
of(false).pipe(startWith(x));
因此,我担心这些已过时的警告。弃用消息说使用scheduled()
和concat()
运算符来代替,但是对于像startWith()
这样已经很方便的运算符来说,这似乎是一个更复杂的选择。
所以我对为什么不推荐使用它感到困惑,但是为什么有时只不推荐使用它。
答案 0 :(得分:18)
不,不是。
当前只有一个活动签名:startWith(...values)
除此签名外,它还有几个重载,它们将scheduler: SchedulerLike
作为最新参数:startWith(...values, scheduler),并且不建议使用此功能。
如果您不将scheduler
与startWith
一起使用,则可以。例如,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
,而我的观察对象将其映射到myType2
:
startWith<MyType1, MyType1>(undefined)
答案 3 :(得分:0)
对于在使用 startWith(null)
时在 VSCode 中看到已弃用警告的用户,只需将其替换为 startWith(<string>null)
即可解决警告消息。
更多信息是here。