自从更新到RXJS版本6以来,我的WebStorm编辑器一直在抱怨startWith()的 * 一些 * 用法,该操作符被标记为 * 弃用 *。
您可以在源代码中看到这些方法被标记为deprecated:
- 链接到主服务器(将来更难链接)
对我来说,问题是这个警告并不一致。有时它会报告这个方法被否决了,而其他时候却没有。虽然我可以在下面的代码示例中重现这个警告。它似乎在我自己的源代码中随机发生。
未过时的:
of(false).pipe(startWith(true));
标记为已过时:
const x: any = true;
of(false).pipe(startWith(x));
所以我很担心这些过时的警告。过时的消息说使用scheduled()
和concat()
操作符代替,但感觉这像是一个更复杂的替代已经方便的操作符,如startWith()
。
所以我有点困惑,为什么它被否决了,为什么它只是有时被否决了。
7条答案
按热度按时间jc3wubiy1#
不,它不是。
当前只有一个活动特征码:开始于(...值)
除了这个签章之外,它还有几个接受
scheduler: SchedulerLike
做为最新参数的多载:startWith(...values,scheduler),此功能已过时。如果不将
scheduler
与startWith
一起使用,则不会有问题。如果你这样做,那么你需要重写你的代码使用
scheduled
函数,就像他们建议在旁边的注解折旧注解:scheduled([[a, b, c], source], scheduler).pipe(concatAll())
.您很可能正在使用
startWith(null)
或startWith(undefined)
,尽管有此通知,但它们并未过时,但IDE检测到错误的函数签名(已过时),并显示警告。或者,您正在使用发出
any
类型的formControl.valueChanges
,或者任何其他带有any
的可观察流。因为any
与SchedulerLike
匹配,所以您会看到该通知。因此,请尝试通过添加
filter((v): v is number => typeof === 'number')
或任何其他可能的方式来避免any
。hlswsv352#
如果您在使用
startWith(null)
时在VSCode中看到过时的警告,只需将其替换为startWith(<string>null)
即可解决警告消息。更多信息请参阅here。
lmyy7pcs3#
一种避免弃用通知的方法是对传入
startWith
的任何内容进行类型转换,例如OP示例中的startwith(x as boolean)
。这样,您就可以确保IDE没有使用过时的签名。
iyr7buue4#
当我尝试使用
startWith(undefined)
时,我还收到了一条已弃用的消息。原因是它的默认值为已弃用的APIexport declare function startWith<T>(scheduler: SchedulerLike): MonoTypeOperatorFunction<T>;
修复方法是指定返回类型
D
(属于未定义的):export declare function startWith<T, D>(v1: D): OperatorFunction<T, T | D>;
例如,假设我有接口
MyType1
,我的可观测量将其Map到myType2
:startWith<MyType1, MyType1>(undefined)
wgmfuz8q5#
这一招非常管用:
startWith<void, void>(undefined);
vwkv1x7d6#
对于一个特定的情况(文本输入元素),我目前的选择是使用一个空字符串
''
。它也是一个伪值。startWith('')
。但是可观察的事件来自类型any。所以null也应该被接受。(背景:我使用角形材质“FormControl”值更改。)crcmnpdw7#
已替换
与
以获得更好的可读性。