Sobes.tech
Middle+

type Obj = { name: string age: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obj = { name: "Nik", age: 25 } const value1 = getObjField(user, "name") const value2 = getObjField(user, "age") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech AI

Respuesta de la IA

En la primera versión de la función getObjField, los parámetros tienen tipo any, lo que no permite verificar los tipos y puede llevar a errores, por ejemplo, al acceder a una clave que no existe.

En la segunda versión, se usa un genérico con restricción K extends keyof T, lo que garantiza que la clave key realmente exista en el objeto obj. Esto aumenta la seguridad y la comodidad al usar la función.

Ejemplo:

type Obj = {
  name: string;
  age: number;
};

const getObjField = <T, K extends keyof T>(obj: T, key: K): T[K] => {
  return obj[key];
};

const user: Obj = { name: "Nik", age: 25 };

const value1 = getObjField(user, "name"); // tipo string
const value2 = getObjField(user, "age");  // tipo number
// const value3 = getObjField(user, "test"); // Error de compilación, la clave "test" no existe en Obj

De esta manera, la segunda opción de la función garantiza la seguridad de tipos y previene errores en tiempo de compilación.