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

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

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 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