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.