Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

411
Visualizações
RXJS 'nunca' sujeto como tipo genérico

Estoy trabajando con RXJS y Typescript en un proyecto angular. He escrito lo siguiente en mi código:

 const sub = new Subject<never>();

Espero que esta línea signifique que cualquier suscriptor que defina los métodos 'siguiente' y 'error', como se puede ver a continuación, nunca llamará al método 'siguiente'. Solo se llamará al método 'error', si es que se llama.

 sub.subscribe(() => /*do something with 'next' value*/, error => /*do something with 'error' value*/)

Sin embargo, cuando escribo lo siguiente:

 sub.next();

No me sale un error de compilación.

Según tengo entendido, el sujeto genérico es el tipo devuelto por el sujeto, por lo que nunca significa que nunca llamaremos al siguiente método.

¿Alguien puede explicar por qué? ¿Es esto un error, una característica o un malentendido de mi parte?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Especificar el parámetro de tipo en su Asunto restringe el tipo de valor que puede pasar cuando llama a .next() , por lo que si intenta pasar un valor: sub.next('string value') obtendrá un error:

El argumento de tipo 'cadena' no se puede asignar al parámetro de tipo 'nunca'.(2345)

Sin embargo, el parámetro de value de Subject.next() es opcional ( en RxJS v6 ). Esto significa que se permite llamar a sub.next() sin pasar un argumento, por lo que puede llamar a Subject.next con un argumento de tipo T o sin ningún argumento.


Creo que este comportamiento ha cambiado en RxJS v7. Problema interesante de GitHub

over 4 years ago · Santiago Trujillo Relatório

0

Parece que para Subject<T> el next método se define así: next(val: T | undefined): void , por lo que siempre puede pasarle undefined. Esto es diferente a BehaviorSubject , por ejemplo, donde la firma es next(val: T): void e intentar llamar a next producirá un error de tiempo de compilación.

No estoy seguro de por qué este es el caso.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda