Funciones tipadas + inferencia: el combo ganador
Funciones tipadas e inferencia: el combo ganador
Tipar funciones es donde TypeScript paga la mayor parte de su valor: entradas claras, salidas claras y errores que aparecen mientras escribes, no en producción. La buena noticia es que casi nunca necesitas anotar el tipo de retorno: TypeScript lo infiere a partir del cuerpo.
Parámetros y retornos
Anota siempre los parámetros, porque TypeScript no puede adivinarlos. El retorno suele inferirse, aunque conviene anotarlo en funciones públicas o exportadas para fijar el contrato.
type Plan = "free" | "pro";
// Retorno inferido como number
function precio(plan: Plan) {
return plan === "free" ? 0 : 12;
}
// Retorno anotado para fijar el contrato público
export function formatearPrecio(valor: number): string {
return `$${valor.toFixed(2)}`;
}Funciones asíncronas y Promise<T>
Toda función async devuelve una Promise. El tipo entre los signos <> es lo que resuelve la promesa cuando esperas con await.
async function buscarUsuario(id: string): Promise<{ id: string; nombre: string }> {
// imagina una consulta a la base de datos
return { id, nombre: "María" };
}
const usuario = await buscarUsuario("u_1"); // usuario: { id, nombre }Atención
Si una función puede no devolver valor, modela el caso explícitamente con T | null en lugar de devolver undefined sin avisar. Así el compilador obliga a quien la llama a manejar el caso vacío.
Una función async que hace return 5, ¿qué tipo devuelve?
async envuelve su retorno en una Promise. Devolver 5 dentro de una async produce Promise<number>.Ejercicio práctico
Objetivo: tipar funciones síncronas y asíncronas con casos límite.
- Escribe
parsearPrecio(input: string): number | nullque convierta el texto a número o devuelvanullsi no es válido. - Llama a la función y maneja el caso
nullantes de usar el resultado. - Escribe una función
asyncque devuelva una lista de tres items con tipo explícito. - Usa
awaitpara obtener la lista y recórrela.
Entregable: el archivo con ambas funciones y una pequeña prueba que demuestre el manejo del caso null.
Para recordar
- Anota los parámetros siempre; el retorno casi siempre se infiere.
- Toda función
asyncdevuelvePromise<T>. - Modela la ausencia de valor con
T | nullpara forzar su manejo.