Middle+
tip Obiect = { nume: string varsta: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiect = { nume: "Nik", varsta: 25 } const value1 = getObjField(user, "nume") const value2 = getObjField(user, "varsta") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech AI
Răspuns de la AI
În prima versiune a funcției getObjField, parametrii au tipul any, ceea ce nu permite verificarea tipurilor și poate duce la erori, de exemplu, la accesarea unei chei inexistente.
În a doua versiune, se folosește un generic cu restricția K extends keyof T, ceea ce garantează că cheia key există cu adevărat în obiectul obj. Acest lucru crește siguranța și confortul utilizării funcției.
Exemplu:
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"); // tip: string
const value2 = getObjField(user, "age"); // tip: number
// const value3 = getObjField(user, "test"); // Eroare de compilare, cheia "test" nu există în Obj
Astfel, a doua versiune a funcției asigură siguranța tipurilor și previne erorile în timpul compilării.