Sobes.tech
Middle+

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

sobes.tech AI

Antwoord van AI

In de eerste versie van de functie getObjField hebben de parameters het type any, wat geen typecontrole toestaat en kan leiden tot fouten, bijvoorbeeld bij het benaderen van een niet-bestaande sleutel.

In de tweede versie wordt een generiek met de beperking K extends keyof T gebruikt, wat garandeert dat de sleutel key daadwerkelijk bestaat in het object obj. Dit verhoogt de veiligheid en het gebruiksgemak van de functie.

Voorbeeld:

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"); // type string
const value2 = getObjField(user, "age");  // type number
// const value3 = getObjField(user, "test"); // Compileerfout, sleutel "test" bestaat niet in Obj

Op deze manier zorgt de tweede versie van de functie voor typeveiligheid en voorkomt fouten tijdens de compilatie.