DocumentX Logo
DocumentX.
Ctrl+K
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

ContextoSignificado de extendsPropó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