Explicando los tipos dinámicos en TypeScript

Es una forma de decirle a TypeScript que un tipo puede ser dinámico, es decir, que no se conoce exactamente hasta que se usa. Nos permite escribir código reutilizable y flexible, sin perder la seguridad de tipos.

Ejemplo:

function wrapInArray<T>(element: T): T[] {
  return [element];
}

const numero = wrapInArray<number>(5); // number[]
const texto = wrapInArray<string>("hola"); // string[]

Donde T es el tipo dinamico.

También se pueden pasar varios tipos dinámicos

function combinar<T, U>(a: T, b: U): [T, U] {
  return [a, b];
}

const resultado = combinar<string, number>("edad", 25); // ["edad", 25]

Se pueden definir tipos por default 🥴

function obtenerElemento<T = string>(elemento: T): T {
  return elemento;
}

const porDefecto = obtenerElemento("hola"); // T es string
const personalizado = obtenerElemento<number>(5); // T es number

Si no le definimos su "tipado", lo infiere automáticamente.

function duplicar<T>(valor: T): [T, T] {
  return [valor, valor];
}

const res = duplicar(42); // Infiere que T es number