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

133
Vistas
método estático abstracto en TypeScript

Estoy buscando una forma de implementar un método abstract static en TypeScript.

Aquí un ejemplo:

 abstract class A { abstract static b (): any // error } class B extends A { static b () {} }

Esto está permitido con métodos public , private y protected , pero no con un método static . TypeScript devuelve el siguiente error:

El modificador 'estático' no se puede usar con el modificador 'abstracto'.ts(1243)

¿Hay algún trabajo alrededor?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que el razonamiento es generalmente el siguiente:

  • Los métodos abstractos son marcadores de posición que se supone que debe implementar una subclase concreta.

  • La clase base abstracta tendrá un método concreto que utiliza este marcador de posición abstracto y, por lo tanto, requiere que se implemente; sin esto, los métodos abstractos tienen poco sentido. P.ej:

     abstract class Foo { bar() { return this.baz() + 1; } abstract baz(): int; }
  • Esto solo se puede llamar en una instancia concreta, por ejemplo:

     function (foo: Foo) { let val = foo.bar(); ... }

    El resultado será diferente aquí según la subclase concreta de Foo que obtenga, pero está garantizado que todo funcionará.

Ahora, ¿cómo se vería esto con métodos static ?

 abstract class Foo { static bar() { return this.baz() + 1; } abstract static baz(): int; } function (F: typeof Foo) { let val = F.bar(); ... }

Esto parece algo lógico y debería funcionar, ¿no? Pero:

  • Si escribe esto, básicamente no hay diferencia para pasar instancias de clases, excepto por el tipo typeof de escribir. ¿Entonces por qué?
  • Si nunca crea una instancia de la clase, ¿cuál es el punto de una clase?
  • Si su método static crea una instancia de un objeto, si actúa como un constructor alternativo , lo cual es completamente legítimo, entonces llame a F.bar() para obtener una nueva instancia, esperaría obtener una instancia de F , pero podría ser obtener una instancia de alguna subclase de la misma. Y eso podría decirse que no es deseado.

Para reformular la cadena de argumentos aquí:

  • Si va a utilizar métodos static , deberían actuar como constructores alternativos y devolver una instancia, de lo contrario, tienen poco negocio como parte de la clase.
  • Los constructores alternativos deberían devolver una instancia de la clase a la que los llamaste. Llamar F.bar() y no obtener una instancia de exactamente F es... ¿raro?
  • Si va a llamar a constructores alternativos estáticos en clases, querrá llamarlos en clases específicas y no en variables como se muestra arriba, porque de lo contrario realmente no sabrá lo que está obteniendo (vea el punto anterior) .
  • Por lo tanto, no hay un caso de uso real para un método abstract static , ya sea como constructor alternativo directo o como función de ayuda para uno, ya que eso conduciría a una violación de uno de los puntos anteriores de una forma u otra.

Por lo que veo, este es más o menos el pensamiento clásico que lleva a que los métodos abstract static no sean una cosa. Ciertas limitaciones técnicas en Java pueden haber contribuido a eso y/o conducir a dichas limitaciones técnicas en primer lugar.

En Javascript se puede argumentar que esto tiene menos sentido, ya que incluso las clases son objetos y sería completamente factible usarlos como se describe anteriormente, y en ciertas situaciones incluso puede tener sentido. Pero aquí estamos.

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