TypeScript/Palabras Claves
Palabra clave para Herencia
extends Permite heredar desde otra parte.
.
1. Con Clases (Herencia de POO)
En la Programación Orientada a Objetos, se usa para que una clase hija herede atributos y métodos de una clase padre.
typescriptclass Animal {
comer(): void {
console.log("Comiendo...");
}
}
class Perro extends Animal {
ladrar(): void {
console.log("¡Guau!");
}
}
2. Con Interfaces (Ampliación de Contratos)
Permite combinar o extender la estructura de una interfaz existente para añadir más propiedades sin duplicar código.
typescriptinterface Usuario {
nombre: string;
}
interface Admin extends Usuario {
permisos: string[];
}
3. Con Genéricos (Restringir / Filtrar Tipos)
Se utiliza para exigir que un tipo genérico <T> cumpla obligatoriamente con una estructura mínima. Actúa como un filtro o regla de validación.
typescript// Le exigimos a T que al menos tenga un 'id' de tipo number
function imprimirId<T extends { id: number }>(objeto: T) {
console.log("El ID es:", objeto.id);
}
// ✅ Válido: tiene 'id' (y no importa que tenga más propiedades)
imprimirId({ id: 10, nombre: "Laptop", precio: 500 });
// ✅ Válido: cumple con tener un 'id'
imprimirId({ id: 25, usuario: "Carlos" });
// ❌ ERROR: Un texto no tiene la propiedad 'id'
// imprimirId("Hola");
4. Con Tipos Condicionales (Operador Ternario de Tipos)
Se combina con type para hacer una evaluación lógica (condición ? verdadero : falso) en tiempo de compilación.
typescript// Si 'T' YA ES un array de algo, déjalo como T.
// Si 'T' NO ES un array, conviértelo en un array de T (T[]).
type AsegurarArray<T> = T extends Array<any> ? T : T[];
// 1. Le pasamos un número:
// ¿El 'number' es un Array? NO -> Devuelve 'number[]' (Array de números)
type Lista1 = AsegurarArray<number>;
// 2. Le pasamos un Array de textos:
// ¿El 'string[]' es un Array? SÍ -> Devuelve 'string[]' (se queda igual)
type Lista2 = AsegurarArray<string[]>;
Resumen Rápido
| Contexto | Significado de extends | Propósito principal |
|---|---|---|
| Clase | "Hereda de" | Copiar y extender funcionalidad de una clase padre |
| Interfaz | "Amplía a" | Reutilizar y agregar campos a una estructura de objeto |
| Genéricos | "Cumple la estructura de" | Garantizar que un tipo tenga propiedades mínimas |
Tipos (type) | "Es compatible con" | Crear un if / else para transformar tipos de datos |