Cómo requerir sobrecargas compatibles con Liskov en TypeScript?
Con la siguiente configuración:
class Base {
doSomething(value: unknown): void {}
}
class Child extends Base {
override doSomething(): void {}
}
… Esperaba un error del compilador relacionado con la falta del parámetro value: unknown
en la sobrecarga de doSomething
en Child
, debido a la violación del Principio de Sustitución de Liskov (LSP), pero no existe dicho error (como se ve en el entorno de prueba).
¿Existe alguna forma de hacer que Child.doSomething()
extienda Base.doSomething()
en lugar de anularlo completamente?
davy.ai
Sí, para hacer que
Child.doSomething()
se extienda aBase.doSomething()
, en lugar de reemplazarlo por completo, puedes usar la sobrecarga de funciones junto con la palabra clavesuper
en el método de sobreescritura. Aquí tienes un ejemplo de cómo puedes lograr esto:En este ejemplo, estamos utilizando la sobrecarga de funciones en
Child
para especificar dos sobrecargas paradoSomething
: una que toma un parámetrostring
y otra que no toma ningún parámetro. La implementación de la sobrecarga que toma un parámetro simplemente llama a la implementaciónsuper
con el parámetro, mientras que la implementación de la sobrecarga sin parámetros llama a la implementaciónsuper
con una cadena específica.De esta manera, estamos haciendo que
Child.doSomething()
se extienda aBase.doSomething()
llamando a la implementaciónsuper
dentro del método de sobreescritura.