Skip to content

Lección 79 — Parámetros Opcionales y por Defecto

TypeScript permite que los parámetros de una función sean opcionales o tengan valores por defecto. Ambas características hacen que las funciones sean más flexibles sin sacrificar la seguridad de tipos.

Se marca un parámetro como opcional añadiendo ? después del nombre:

function saludar(nombre: string, saludo?: string): string {
if (saludo) {
return `${saludo}, ${nombre}`;
}
return `Hola, ${nombre}`;
}

Regla importante: los parámetros opcionales deben ir después de los requeridos.

// ❌ Error
function ejemplo(opcional?: string, requerido: string) {}
// ✅ Correcto
function ejemplo(requerido: string, opcional?: string) {}

Al llamar a la función, puedes omitir el parámetro opcional o pasar undefined:

saludar('Ana'); // ✅ omite el segundo parámetro
saludar('Ana', undefined); // ✅ también válido
saludar('Ana', 'Hey'); // ✅ con valor

Los parámetros por defecto tienen un valor que se usa si no se proporciona:

function saludar(nombre: string, saludo: string = 'Hola'): string {
return `${saludo}, ${nombre}`;
}
saludar('Ana'); // → 'Hola, Ana'
saludar('Ana', 'Hey'); // → 'Hey, Ana'

Los parámetros por defecto son implícitamente opcionales. No necesitas añadir ?.

// Parámetros opcionales
function configurarUsuario(
nombre: string,
email?: string,
telefono?: string
): void {
console.log(`Usuario: ${nombre}`);
if (email) console.log(`Email: ${email}`);
if (telefono) console.log(`Tel: ${telefono}`);
}
configurarUsuario('Ana');
configurarUsuario('Luis', 'luis@mail.com');
configurarUsuario('Pedro', 'pedro@mail.com', '555-1234');
// Parámetros por defecto
function crearProducto(
nombre: string,
precio: number = 0,
disponible: boolean = true
): object {
return { nombre, precio, disponible };
}
console.log(crearProducto('Laptop')); // precio=0, disponible=true
console.log(crearProducto('Mouse', 25.99)); // disponible=true
console.log(crearProducto('Monitor', 300, false));
// Combinación
function reservar(
habitacion: string,
huespedes: number = 1,
fumador?: boolean
): string {
const tipo = fumador ? 'fumador' : 'no fumador';
return `${habitacion} para ${huespedes} persona(s), ${tipo}`;
}

Crea una función enviarMensaje que reciba:

  • destinatario: string (requerido)
  • mensaje: string (requerido)
  • asunto?: string (opcional)
  • prioridad: string = 'normal' (por defecto)

La función debe imprimir un resumen del mensaje. Pruébala con diferentes combinaciones: solo destinatario y mensaje, con asunto, con prioridad alta, etc.

Un parámetro con valor por defecto se vuelve opcional automáticamente. Si quieres distinguir entre “no se pasó” y “se pasó explícitamente un valor”, usa undefined como valor por defecto y verifica con arguments.length.

Cuando tengas muchos parámetros opcionales, considera usar un objeto de configuración en lugar de una docena de parámetros. Es más legible y escalable.