Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

85
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda