Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

405
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda