Mientras leía el método que reemplaza parte de la documentación de Typescript, encontré algo interesante. Normalmente, no se hace referencia al método de la clase base al anular el método en javascript. Pero es diferente en mecanografiado.
Ejemplo
class Base { greet() { console.log("Hello, world!"); } } class Derived extends Base { /* Property 'greet' in type 'Derived' is not assignable to the same property in base type 'Base'. Type '(name: string) => void' is not assignable to type '() => void'. */ greet(name: string) { console.log(`Hello, ${name.toUpperCase()}`); } }En realidad, se puede hacer de esta manera.
class Derived extends Base { greet(name?: string) { if (name === undefined) { super.greet(); } else { console.log(`Hello, ${name.toUpperCase()}`); } } }¿Pero por qué? ¿Es esto un patrón? ¿Tengo que hacerlo de esta manera al anular el método?
"Asignable" en mecanografiado simplemente significa que el parámetro y los tipos de retorno se superponen.
Tienes estas firmas:
greet(): void; greet(name: string): void;Dado que los tipos de parámetros no se superponen, TypeScript le advierte que la firma no se puede asignar al método base.
Si cambia el segundo método para greet(name?: string): void;
luego, los tipos de parámetros se superponen ( ? significa que un parámetro es opcional)) y TypeScript no necesita advertirle, porque necesita verificar manualmente si el name está disponible o no.