A la hora de escribir funciones, TypeScript también es muy util. Sin embargo, hay algunas cuestiones que tenes que saber. Esta es una funcion en JavaScript

function saludar(name){
	console.log(`Hola ${name}`)
}

Sin embargo, a esta funcion podemos pasarle un string, un number, un bool y nunca dará error. Aceptará cualquier cosa que le digamos y eso no está del todo bien. La misma función en TypeScript nos dará un error que dice que el parametro name implicitamente es de tipo any y que se recomienda darle un tipo. Para tiparla solo hace falta agregarle dos puntos y el tipo de dato

function saludar(name: string){
	console.log(`Hola ${name}`)
}

A veces, sobre todo cuando usamos React, a la funciones les pasamos parametros como objetos. Asi se ve en JavaScript

function saludar({name, age}){
	return `Hola ${name}, tienes ${age} años`
}

Como vimos en el ejemplo anterior, el parametro age puede ser un string y nunca nos dará error. A menos que utilicemos el tipado de TypeScript. Para poder tipar parametros dentro de un objeto debemos seguir la siguiente sintaxis

function saludar({name, age}: {name:string, age:number}){
	return `Hola ${name}, tienes ${age} años`
}

Para ejecutarla, sería asi:

saludar({name:"Alejo", age:28})

Inferencia en las funciones

Como hemos visto al principio, TypeScript no puede inferir que tipo de valores le vamos a dar a los parametros de una funcion, se lo tenemos que decir nosotros. Lo que si puede inferir es cual va a ser el resultado de esa función. Veamos este ejemplo de nuevo

function saludar({name, age}: {name:string, age:number}){
	return `Hola ${name}, tienes ${age} años`
}

La función va a retornar una cadena de texto, por lo que TypeScript infiere que el valor de esa funcion será un string. Si, por ejemplo nosotros queremos guardar el resultado de esa funcion en una variable a la cual le asignamos el tipo number, nos dará un error.

let saludo: number
saludo=saludar({name:"Alejo", age:28})S

Sin embargo, nunca le dijimos a la funcion que iba a devolver un valor de tipo string. TypeScript lo infirió por nosotros. Si necesitas tiparlo, igualmente podes hacerlo. Algunas veces no se va a inferir que devolverá la funcion y acordate que dejarlo en un any no es buena idea. Mirá como podes hacerlo con una arrow function

const sumar=(a:number, b:number): number=>{
	return a+b
}

Never

Algunas funciones nunca devolverán nada, aunque son muy pocas. La mayoria de las funciones tienen returns implicitos. Las funciones que suelen no devolver nunca nada son los error handlers, por ejemplo

function throwError(message: string):never{
	throw new Error(message)
}