javascript - Er startWith-operatoren i RXJS virkelig foreldet?
Siden oppdateringen til RXJS versjon 6 har WebStorm-editoren min klaget på noen bruksområder av startWith() om at operatøren er merket som utdatert.
Du kan se i kildekoden at metodene er merket som foreldet:
- Lenke til master (Vanskeligere lenke for fremtiden)
Problemet for meg er at advarselen om foreldet funksjon ikke er konsekvent. Noen ganger rapporterer den metoden som foreldet, og andre ganger gjør den det ikke. Selv om jeg kan gjenskape advarselen i kodeeksemplene nedenfor, ser det ut til å skje tilfeldig i min egen kildekode.
Ikke foreldet:
of(false).pipe(startWith(true));
Er merket som foreldet:
const x: any = true;
of(false).pipe(startWith(x));
Så jeg er bekymret for disse foreldede advarslene. Meldingen om foreldelse sier å bruke scheduled() og concat() operatorer i stedet, men det føles som et mer komplisert alternativ til en allerede praktisk operator som startWith().
Så jeg er på en måte forvirret over hvorfor det er utdatert, men også hvorfor det bare er utdatert noen ganger.
Svar #1
Nei, det er det ikke.
For øyeblikket er det bare én aktiv signatur: startWith(...verdier)
Bortsett fra denne signaturen, har den flere overbelastninger som aksepterer scheduler: SchedulerLike som den siste parameteren: startWith(...values, scheduler), og denne funksjonaliteten har blitt utdatert.
Hvis du ikke bruker scheduler med startWith, er du i orden.
Hvis du gjør det, må du omskrive koden din ved å bruke scheduled-funksjonen som de foreslår i kommentaren ved siden av deprecation-annotasjonen: scheduled([[a, b, c], source], scheduler).pipe(concatAll()).
Det er svært sannsynlig at du bruker startWith(null) eller startWith(undefined), de er ikke foreldet til tross for meldingen, men IDE oppdager en feil funksjonssignatur, som er foreldet, og viser advarselsen.
Eller, du bruker formControl.valueChanges som sender ut any-type, eller en annen observabel strøm med any. Fordi any matcher SchedulerLike, ser du meldingen.
Derfor, prøv å unngå any ved å legge til filter((v): v is number => typeof v === 'number') eller en hvilken som helst annen mulig måte.
Svar #2
For de som ser den avskrevne advarselen i VSCode når du bruker startWith(null), bare erstatt det med startWith(<string>null) for å løse advarselen.
Mer informasjon finnes her.
Svar #3
En måte å unngå advarselen om foreldelse på er ved å typekaste det du sender inn i startWith. For eksempel startWith(x as boolean) i eksemplet til OP.
På denne måten beroliger du IDE-en din om at du ikke bruker en utdaterte signatur.