Saltar al contenido principal
Curso/Funciones/Function Overloads
Volver a Funciones

Funciones — Leccion 5

·15 min

Function Overloads

Multiples firmas para una misma función.

Function Overloads

Permite definir múltiples firmas para una función, con diferentes tipos de parámetros y retorno.

typescript
// Firmas de overload
function format(valor: string): string;
function format(valor: number): string;
function format(valor: string | number): string {
  if (typeof valor === "string") {
    return valor.toUpperCase();
  }
  return valor.toFixed(2);
}

format("hola");    // "HOLA" (retorna string)
format(3.14);      // "3.14" (retorna string)

Cuando usar overloads

Diferentes tipos de retorno

typescript
function buscar(id: number): Usuario;
function buscar(nombre: string): Usuario[];
function buscar(param: number | string): Usuario | Usuario[] {
  if (typeof param === "number") {
    return { id: param, nombre: "Ana" };
  }
  return [{ id: 1, nombre: param }];
}

const usuario = buscar(1);           // Usuario
const usuarios = buscar("Ana");      // Usuario[]

Diferente cantidad de argumentos

typescript
function crear(nombre: string): void;
function crear(nombre: string, edad: number): void;
function crear(nombre: string, edad?: number): void {
  if (edad !== undefined) {
    console.log(`Crear ${nombre}, ${edad} años`);
  } else {
    console.log(`Crear ${nombre}`);
  }
}

crear("Ana");        // OK
crear("Juan", 25);   // OK

Limitaciones

typescript
// Los overloads deben ser compatibles con la implementación
function proceso(x: string): string;
function proceso(x: number): number;
function proceso(x: string | number): string | number {
  // La implementación debe manejar ambos casos
  return x;
}

// No se puede sobrecargar con diferentes cantidades de opcionales
// TypeScript no permite overloads con parámetros por defecto

Ejercicio pratico

Crea una función 'obtener' que acepte un number (id) o string (nombre) y retorne相应的 información.

exercise.ts
Loading...
Resultado

Haz clic en "Ejecutar" para ver el resultado...

Ir al examen del modulo
Curso de TypeScript — Aprende desde cero