Lección 79 — Parámetros Opcionales y por Defecto
🧠 Concepto
Section titled “🧠 Concepto”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.
Parámetros opcionales con ?
Section titled “Parámetros opcionales con ?”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.
// ❌ Errorfunction ejemplo(opcional?: string, requerido: string) {}
// ✅ Correctofunction ejemplo(requerido: string, opcional?: string) {}Diferencia con undefined explícito
Section titled “Diferencia con undefined explícito”Al llamar a la función, puedes omitir el parámetro opcional o pasar undefined:
saludar('Ana'); // ✅ omite el segundo parámetrosaludar('Ana', undefined); // ✅ también válidosaludar('Ana', 'Hey'); // ✅ con valorParámetros por defecto
Section titled “Parámetros por defecto”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 ?.
💻 Ejemplo
Section titled “💻 Ejemplo”// Parámetros opcionalesfunction 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 defectofunction crearProducto( nombre: string, precio: number = 0, disponible: boolean = true): object { return { nombre, precio, disponible };}
console.log(crearProducto('Laptop')); // precio=0, disponible=trueconsole.log(crearProducto('Mouse', 25.99)); // disponible=trueconsole.log(crearProducto('Monitor', 300, false));
// Combinaciónfunction reservar( habitacion: string, huespedes: number = 1, fumador?: boolean): string { const tipo = fumador ? 'fumador' : 'no fumador'; return `${habitacion} para ${huespedes} persona(s), ${tipo}`;}📝 Ejercicio
Section titled “📝 Ejercicio”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.
⚠️ Nota
Section titled “⚠️ Nota”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.