Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

78
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!