Sobes.tech
Middle+

typ Obiekt = { meno: string vek: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { meno: "Nik", vek: 25 } const value1 = getObjField(user, "meno") const value2 = getObjField(user, "vek") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech AI

Odpoveď od AI

V prvej verzi funkcie getObjField majú parametre typ any, čo neumožňuje kontrolu typov a môže viesť k chybám, napríklad pri prístupe k neexistujúcemu kľúču.

V druhej verzii sa používa generický typ s obmedzením K extends keyof T, čo zaručuje, že kľúč key skutočne existuje v objekte obj. To zvyšuje bezpečnosť a pohodlie pri používaní funkcie.

Príklad:

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"); // typ: string
const value2 = getObjField(user, "age");  // typ: number
// const value3 = getObjField(user, "test"); // Chyba pri kompilácii, kľúč "test" neexistuje v Obj

Týmto spôsobom druhá verzia funkcie zabezpečuje typovú bezpečnosť a zabraňuje chybám pri kompilácii.