javascript - O operador startWith no RXJS está realmente obsoleto?
Desde a atualização para a versão 6 do RXJS, meu editor WebStorm tem reclamado em alguns usos de startWith() que o operador está marcado como obsoleto.
Você pode ver no código-fonte que os métodos estão marcados como obsoletos:
- Link para o mestre (Link mais difícil para o futuro)
O problema para mim é que o aviso de descontinuação não é consistente. Às vezes ele informa que o método está descontinuado e outras vezes não. Embora eu consiga reproduzir o aviso nos exemplos de código abaixo, parece acontecer de forma aleatória no meu próprio código-fonte.
Não obsoleto:
of(false).pipe(startWith(true));
Está marcado como obsoleto:
const x: any = true;
of(false).pipe(startWith(x));
Então, estou preocupado com esses avisos de descontinuação. A mensagem de descontinuação diz para usar os operadores scheduled() e concat() em vez disso, mas isso parece uma alternativa mais complicada para um operador já prático como startWith().
Então, estou meio confuso sobre por que é obsoleto, mas também por que é obsoleto apenas às vezes.
Resposta #1
Não, não é.
Atualmente há apenas uma assinatura ativa: startWith(...valores)
Além desta assinatura, ela possui várias sobrecargas que aceitam scheduler: SchedulerLike como o último parâmetro: startWith(...values, scheduler) e essa funcionalidade foi descontinuada.
Se você não usar scheduler com startWith, você está bem.
Se você fizer isso, então precisa reescrever seu código usando a função scheduled como eles sugerem no comentário ao lado da anotação de descontinuação: scheduled([[a, b, c], source], scheduler).pipe(concatAll()).
Muito provavelmente, você está usando startWith(null) ou startWith(undefined), eles não estão obsoletos apesar do aviso, mas o IDE detecta uma assinatura de função incorreta, que está obsoleta, e mostra o aviso.
Ou você está usando formControl.valueChanges, que emite tipo any, ou qualquer outro stream observável com any. Como any corresponde ao SchedulerLike, você vê o aviso.
Portanto, tente evitar any adicionando filter((v): v is number => typeof v === 'number') ou qualquer outro meio possível.
Resposta #2
Para aqueles que veem o aviso de descontinuação no VSCode quando estão usando startWith(null), basta substituí-lo por startWith(<string>null) para resolver a mensagem de aviso.
Mais informações estão aqui.
Resposta #3
Uma maneira de evitar o aviso de descontinuação é fazendo um cast do que você estiver passando para startWith. Por exemplo, startwith(x as boolean) no exemplo do autor da pergunta.
Dessa forma, você está garantindo ao seu IDE que não está usando uma assinatura descontinuada.