Funciones y objetos tipados

Aprende a tipar parámetros, retornos y objetos para que tu código sea más claro y fiable.

Las funciones y los objetos son el núcleo de casi cualquier proyecto JavaScript. Si aquí tipas bien, el resto del código se vuelve mucho más estable.


Tipar parámetros y retorno

function sumar(a: number, b: number): number {
  return a + b;
}

Aquí dejas claro:

  • qué entra
  • qué sale

Si alguien llama sumar('2', 3), TypeScript protestará.


Funciones flecha

const saludar = (nombre: string): string => {
  return `Hola, ${nombre}`;
};

La sintaxis cambia, pero la idea es la misma.


Parámetros opcionales

function crearSaludo(nombre: string, apellido?: string) {
  return apellido ? `Hola, ${nombre} ${apellido}` : `Hola, ${nombre}`;
}

El ? marca que ese parámetro puede no venir.


Objetos tipados inline

function imprimirUsuario(usuario: { nombre: string; edad: number }) {
  return `${usuario.nombre} tiene ${usuario.edad} años`;
}

Esto sirve para ejemplos simples o tipos que solo se usan una vez.


Extraer el tipo para reutilizarlo

type Usuario = {
  nombre: string;
  edad: number;
  activo: boolean;
};

function imprimirUsuario(usuario: Usuario) {
  return `${usuario.nombre} tiene ${usuario.edad} años`;
}

Cuando una estructura empieza a repetirse, sácala a un type o interface.


Propiedades opcionales

type Usuario = {
  nombre: string;
  edad: number;
  avatar?: string;
};

avatar puede existir o no. Eso es distinto de decir que siempre existe pero puede valer null.


Valores por defecto

function formatearPrecio(precio: number, moneda: string = 'EUR') {
  return `${precio} ${moneda}`;
}

Si hay valor por defecto, el parámetro sigue estando tipado.


Leer bien el contrato

Cuando ves esto:

function guardar(usuario: Usuario): Promise<Usuario> {
  // ...
}

ya sabes mucho sin entrar al cuerpo:

  • recibe un Usuario
  • devuelve una promesa
  • esa promesa resuelve en otro Usuario

Ese es el verdadero valor de TypeScript: menos suposiciones.

En la siguiente lección ampliamos el repertorio con arrays, tuplas y unions.