Lecciones del módulo (1/2)
Funciones tipadas
Las funciones son los bloques fundamentales de cualquier aplicación JavaScript. En TypeScript, podemos anotar con precisión tanto los argumentos de entrada como los valores de retorno, haciendo que nuestras interfaces y llamadas a funciones sean extremadamente seguras y autodocumentadas.
Parámetros Opcionales y por Defecto
En JavaScript, cada parámetro es opcional y, si no se pasa, toma el valor undefined. En TypeScript, por defecto, cada parámetro declarado es obligatorio.
Sin embargo, podemos definir parámetros opcionales usando el signo de interrogación (?), o especificar valores por defecto directamente en la firma.
1. Parámetros Opcionales
Los parámetros opcionales deben colocarse después de los parámetros obligatorios:
function greetUser(name: string, title?: string): string {
if (title) {
return `Buongiorno ${title} ${name}`;
}
return `Ciao ${name}`;
}2. Parámetros por Defecto
Si no se proporciona un valor para un parámetro con valor por defecto, TypeScript infiere su tipo y asigna el valor establecido:
function greetUserWithDefault(name: string, prefix: string = 'Ciao'): string {
return `${prefix} ${name}`;
}Parámetros Rest (...args)
Cuando queremos aceptar un número variable de argumentos, podemos usar el operador rest. En TypeScript, estos parámetros deben estar tipados como un array:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}Firmas de Funciones (Function Types)
Podemos definir el tipo de una función de forma independiente para luego reutilizarlo en la declaración de variables o callbacks:
// Definizione del tipo tramite alias
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;Este enfoque es fundamental cuando se pasan funciones como argumentos a otras funciones (callbacks).
Pruébalo tú
Ejercicio 1: Parámetros Opcionales
Crea una función llamada formatName que acepte un parámetro firstName (cadena) y un parámetro opcional lastName (cadena). Si se proporciona lastName, devuelve 'firstName lastName'; de lo contrario, devuelve solo 'firstName'.
Mostrar pista
Recuerda que el parámetro opcional se declara con lastName?: string después del obligatorio.
Solución disponible después de 3 intentos
Ejercicio 2: Parámetros por Defecto
Crea una función llamada power que acepte una base (número) y un exponent (número con valor por defecto igual a 2). La función debe calcular y devolver el valor de la base elevado al exponente (usa Math.pow).
Mostrar pista
Usa base: number y exponent: number = 2 dentro de la firma de la función.
Solución disponible después de 3 intentos
Ejercicio 3: Firma de la Función
Define un alias de tipo llamado BinaryOp que describa una función que acepte dos parámetros de tipo número y devuelva un número. Luego declara una constante llamada sum de tipo BinaryOp que implemente la suma.
Mostrar pista
La sintaxis para el tipo de función es (a: number, b: number) => number.
Solución disponible después de 3 intentos
Ejercicio 4: Función Callback
Crea una función llamada processItems que acepte dos parámetros: items (un array de cadenas) y callback (una función que acepte una sola cadena y no devuelva nada, es decir, void). La función debe ejecutar un bucle for...of sobre cada elemento de items y pasarlo a la callback.
Mostrar pista
Declara la firma como processItems(items: string[], callback: (item: string) => void): void y usa un bucle para llamar a la callback.
Solución disponible después de 3 intentos