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

322
Views
Permitir que una clase que hereda de una clase abstracta devuelva undefined

Tengo una clase abstracta que se ve así:

 // step.ts import { AllowedStepNames } from "./interfaces"; abstract class Step { abstract nextStep(): AllowedStepNames | undefined }

Que a su vez usa un tipo en un archivo separado:

 // interfaces/index.ts const stepList = { foo: "bar", bar: "baz" }; export type AllowedStepNames = keyof typeof stepList;

Tengo una clase que se extiende desde ella que se ve así:

 // referral-reason.step.ts export default class ReferralReasonStep extends Step { nextStep() { return this.params.reason === 'no-reason' ? 'foo' : undefined } }

Sin embargo, el compilador arroja un error:

 Property 'nextStep' in type 'NotEligibleStep' is not assignable to the same property in base type 'Step'.

Sin embargo, si agrego el tipo de retorno en mi clase heredada así:

 export default class ReferralReasonStep extends Step { nextStep(): AllowedStepNames | undefined { return this.params.reason === 'no-reason' ? 'foo' : undefined } }

Esto me parece extraño, porque esperaría que la clase extendida herede el tipo de retorno de la clase abstracta. ¿Alguien puede decirme qué está pasando? ¿O estoy haciendo algo mal?

Además, si pongo todas mis clases y tipos en el mismo archivo, el problema desaparece.

Ejemplo reproducible aquí

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Creo que tengo el problema ahora:

TypeScript infiere automáticamente la string de tipo en lugar de foo | undefined a su función según el tipo de retorno y la string no se puede asignar a la unión AllowedStepNames .

¿Qué puedes hacer para arreglar esto?

Opción 1

Como ya dijiste en la publicación, puedes establecer explícitamente el tipo de retorno de la función en foo | undefined

opcion 2

La razón por la que no hubo ningún error en el área de juegos de TypeScript es una diferencia en las reglas de tsconfig. Identifiqué a strictNullChecks como la regla que cambia este comportamiento. Entonces, dependiendo de su proyecto, puede habilitar esta regla.

 compilerOptions: { strictNullChecks: "true" }

Opción 3

Al usar as const , puede decirle al compilador que use el valor literal de cadena como tipo en lugar de string .

 nextStep() { return this.params.reason === "no-reason" ? "foo" as const : undefined; }
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!