Skip to content

Types interfaces y generics

TypeScript permite crear tipos reutilizables y genericos para expresar contratos flexibles.

type alias

typescript
type UserId = string;

type User = {
  id: UserId;
  name: string;
};

Interface

typescript
interface Repository {
  findById(id: string): Promise<unknown>;
}

Interface o type

Usa cualquiera con criterio consistente:

  • interface: objetos extensibles y contratos publicos.
  • type: unions, tipos compuestos y aliases.

Generics

typescript
function first<T>(items: T[]): T | undefined {
  return items[0];
}

const firstName = first<string>(["Ana", "Luis"]);

Inferencia:

typescript
const firstNumber = first([1, 2, 3]);

Generics con restricciones

typescript
function getId<T extends { id: string }>(entity: T): string {
  return entity.id;
}

Tipos utilitarios

typescript
type UserPreview = Pick<User, "id" | "name">;
type PartialUser = Partial<User>;
type ReadonlyUser = Readonly<User>;

Buenas practicas

  • Usa generics cuando el tipo de entrada se relaciona con el de salida.
  • No metas generics si un tipo concreto basta.
  • Usa tipos utilitarios para no duplicar contratos.
  • Evita tipos imposibles de leer.

Errores comunes

  • Usar <T> por costumbre sin necesidad.
  • Perder informacion usando unknown o any demasiado pronto.
  • Crear aliases que no aportan significado.

Ejercicio

Crea un tipo generico ApiResponse<T> con data, error y status.