
No necesitas generics realmente, si no estás reusando código.
TL;DR
Pero, si no volver a escribir lo ya escrito es lo tuyo, las generics te van a permitir definir funciones y clases que trabajan con una multitud de tipos.

Las «generics» han estado aquí en lenguajes como C# y Java. Con la capacidad de crear componentes que no sólo trabajan con un tipo de dato, sino con muchos.
Ahora que tenemos esta habilidad en TypeScript, lo mejor sería echarle un ojo, ¿no crees?
Ejemplo 1: Una función que agrega una llave a un objeto
Supongamos que tenemos una función que agrega una llave a un objeto.
Sin «generics» tendríamos que agregar sus tipos, tal vez así:
Pero esto no es muy útil, porque no sabemos qué tipo de objeto nos van a pasar, ni qué tipo de llave o valor.
Podríamos usar any:
Pero usar any es como no usar TypeScript. Perdemos toda la información de tipos. 😅
🎬 ¿Te está gustando este contenido? Tenemos más tutoriales de TypeScript en nuestro canal de YouTube.
Mejor usemos «generics»
Al invocar la función addNewKey estamos pasando los argumentos necesarios, pero también incluimos el tipo de estos argumentos: <string, string, UserType>. 🤯
A una función definida de esa forma, le llamamos generic function, ya que puede trabajar con una multitud de tipos.
A diferencia de trabajar con any, ahora no perdemos información en ningún punto de las invocaciones y retornos. ✅
Inferencia de tipos
Existe una segunda forma de invocar esta función: sin especificar los tipos.
Así es, el compilador de TS puede inferir los tipos a partir de los argumentos y colocar cada uno en las definiciones genéricas.
Esto puede ser útil con tipos sencillos, pero también puede fallar para tipos más complejos. Es mejor definirlos explícitamente.
Ejemplo 2: Una función real con extends
Veamos un ejemplo real de una función que obtiene un access token de Google:

BONUS: Extender tus generics
Puedes extender tus generics al definirlos, desde tipos presentes en el scope:
<Code extends string>- Code debe ser un string<Env extends EnvObject>- Env debe tener la forma de EnvObject
Esto te da más control sobre qué tipos son válidos para tu función.
Seguro encontrarás mejores usos que yo, pero ¡oye! Ahora sabes usar generics. 🎉
Abrazo. bliss.
Enlaces relacionados

Cómo activar el link correspondiente según la ruta anidada que coincida en Remix
Checa este otro Post

