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

82
Vistas
Problema de tipeo estricto con tipos genéricos en mecanografiado

Estoy tratando de aprender a escribir estrictamente en Typescript.

Definí estas clases:

 export abstract class MyAbstractClass<TParam extends MyParamBaseType> { private param: TParam; setInitParams(init: TParam): void { ... } getInitParams(): TParam { .... } } export class MyClass extends MyAbstractClass<AParamType> { private param: AParamType; ... }

El problema es que aparece el error "La clase 'MyClass' extiende incorrectamente la clase base 'MyAbstractClass'. Los tipos tienen declaraciones separadas de una propiedad privada 'param'".

No entiendo por qué me sale este error porque el tipo AParamType extiende correctamente MyParamBaseType

¿Puede alguien ayudarme? Gracias por tu ayuda.

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

La palabra clave private es solo un tiempo de compilación verificado. Esto significa que el param de campo se almacenará en tiempo de ejecución en la instancia de la clase. MyAbstractClass declara que su miembro es privado, por lo que si se le permitiera a MyClass volver a declarar el campo param , terminaría accediendo al mismo campo llamado param en la instancia en tiempo de ejecución, rompiendo la privacidad.

Puede usar los campos de clase privada de ES (con # ). Estos aseguran una gran privacidad incluso en tiempo de ejecución y las colisiones de nombres en la subclase no son un problema ya que cada campo declarado es distinto incluso si comparten el mismo nombre:

 type MyParamBaseType = {} export abstract class MyAbstractClass<TParam extends MyParamBaseType> { #param!: TParam; setInitParams(init: TParam): void { } getInitParams(): TParam { return this.#param; } } type AParamType = {} export class MyClass extends MyAbstractClass<AParamType> { #param!: AParamType; }

Enlace del patio de recreo

O si desea acceder al mismo campo desde la clase base, podría considerar protected en su lugar:

 type MyParamBaseType = {} export abstract class MyAbstractClass<TParam extends MyParamBaseType> { protected param!: TParam; setInitParams(init: TParam): void { } getInitParams(): TParam { return this.param } } type AParamType = {} export class MyClass extends MyAbstractClass<AParamType> { protected param!: AParamType; }

Enlace del patio de recreo

about 4 years ago · Santiago Gelvez 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