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

87
Vistas
Los protectores de tipo en texto mecanografiado se están estrechando para no escribir nunca

Estoy migrando a una versión más nueva de TypeScript, pero comencé a recibir este error en Type Guards.
En la rama else, la pregunta que se muestra es del tipo nunca, en lugar de la pregunta que se muestra es del tipo Pregunta. Cuando ejecuto esto en TypeScript v3.9.5, funciona bien, pero en v4.5.4 da este error. Pegando debajo de mi fragmento de código. También hay una imagen de referencia del error en el código vs.

 export enum QuestionTypesEnum { TYPE1 = 'type1', TYPE2 = 'type2' } export type McqSingle = { hash: string type: QuestionTypesEnum answer: string; } export type McqMultiple = { hash: string type: QuestionTypesEnum answers: string[] } export type Question = | McqSingle | McqMultiple type EmptyQuestion = { hash: string } const isEmptyQuestion = (question: Question | EmptyQuestion): question is EmptyQuestion => { return !('type' in question) } let question: Question | EmptyQuestion = { hash: 'saas', type: QuestionTypesEnum.TYPE1 } if (isEmptyQuestion(question)) { } else { question.type // <-- Typescript complains that "Property 'type' does not exist on type 'never'" }

Enlace del patio de recreo

el error es:

Typescript se queja de que "la propiedad 'tipo' no existe en el tipo 'nunca'"

Error de TS en el código vs

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es que Question es un superconjunto de EmptyQuestion (las instancias de Question son instancias de EmptyQuestion válidas). Como resultado, su predicado de tipo no reduce la variable de question en absoluto; su tipo en la rama if sigue siendo Question | EmptyQuestion .

Funciona si invierte el predicado de tipo para verificar la Question , ya que aunque la Question es una pregunta EmptyQuestion válida, la pregunta EmptyQuestion no es una Question válida:

 const isQuestion = (question: Question | EmptyQuestion): question is Question => { return 'type' in question; }; // ... if (isQuestion(question)) { question.type // ^? −−−− type is Question } else { question.hash // ^? −−−− type is EmptyQuestion }

Enlace del patio de recreo

about 4 years ago · Juan Pablo Isaza 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