🥇 Type Manipulation, Type Parameters en Generic Constraints

Es posible declarar un parámetro de tipo T que este restringido por otro parámetro de tipo. Por ejemplo, en la siguiente función podemos restringir la gama de propiedades que se pueden obtener de un valor A restringiendo las posibles opciones a las propiedades que lo componen.

function obtenerPropiedad<T, K extends keyof T>(obj: T, key: K) {
  return obj[key];
}

const x = { a: 1, b: 2, c: 3, d: 4, e: 5 };

console.log(obtenerPropiedad(x, "b"));
console.log(obtenerPropiedad(x, "g")); // <- esta línea generaría un error