Sobes.tech
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.