🥇 Type Manipulation, Generic Constraints (restricciones genéricas)

En ocasiones requerimos escribir funciones que puedan trabajar con una serie de tipos, en los cuales tenemos conocimiento de ciertas características acerca su composición.

Supongamos que requerimos crear una función que reciba un valor que tenga disponible la propiedad .length, como ya vimos podríamos escribirlo así.

function imprimirLongitud(arg: { length: number }): { length: number } {
  console.log(arg.length);
  return arg;
}

En lugar de esto podemos también utilizar una función genérica que permita recibir cualquier valor que extienda una interfaz con la propiedad .length.

interface ValorConLength {
  length: number;
}

function obtenerLongitud<T extends ValorConLength>(arg: T): T {
  console.log(arg.length);
  return arg;
}

Ahora que ahora nuestra función genérica esta restringida a un T que extienda ValorConLength, también asume como restricción que T tenga una propiedad length.