Sobes.tech
Middle+

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

sobes.tech IA

Resposta da IA

Na primeira versão da função getObjField, os parâmetros têm o tipo any, o que não permite verificar os tipos e pode levar a erros, por exemplo, ao aceder a uma chave que não existe.

Na segunda versão, é usado um genérico com restrição K extends keyof T, o que garante que a chave key realmente exista no objeto obj. Isto aumenta a segurança e a conveniência ao usar a função.

Exemplo:

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"); // Erro de compilação, a chave "test" não existe em Obj

Assim, a segunda versão da função garante a segurança de tipos e previne erros na fase de compilação.