L — Liskov Substitution Principle
“Las clases derivadas deben poder sustituirse por sus clases base sin que el programa falle.”
Si tu código espera un Pato y le pasas un PatoDeGoma, no puede lanzar error cuando le pidan volar().
❌ Mal (herencia mal hecha)
Sección titulada «❌ Mal (herencia mal hecha)»class Rectangulo { constructor(public alto: number, public ancho: number) {}}
class Cuadrado extends Rectangulo { // Si sobreescribes para que alto = ancho siempre, // ROMES el comportamiento esperado de Rectangulo}✅ Bien (composición sobre herencia)
Sección titulada «✅ Bien (composición sobre herencia)»interface FiguraGeometrica { area(): number;}
class Rectangulo implements FiguraGeometrica { constructor(private alto: number, private ancho: number) {} area() { return this.alto * this.ancho; }}
class Cuadrado implements FiguraGeometrica { constructor(private lado: number) {} area() { return this.lado * this.lado; }}En TypeScript moderno, favorece la composición sobre la herencia.