Sobes.tech
Middle+

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

sobes.tech AI

Risposta dell'AI

Nella prima versione della funzione getObjField, i parametri hanno tipo any, il che non consente il verifica dei tipi e può portare a errori, ad esempio, nell'accesso a una chiave inesistente.

Nella seconda versione, si utilizza un generico con restrizione K extends keyof T, che garantisce che la chiave key esista effettivamente nell'oggetto obj. Questo aumenta la sicurezza e la comodità nell'uso della funzione.

Esempio:

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"); // Errore di compilazione, la chiave "test" non esiste in Obj

In questo modo, la seconda versione della funzione garantisce la sicurezza dei tipi e previene errori in fase di compilazione.