Sobes.tech
Middle+

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

sobes.tech AI

Odpověď od AI

V první verzi funkce getObjField mají parametry typ any, což neumožňuje kontrolu typů a může vést k chybám, například při přístupu k neexistujícímu klíči.

Ve druhé verzi je použit generický typ s omezením K extends keyof T, což zaručuje, že klíč key skutečně existuje v objektu obj. To zvyšuje bezpečnost a pohodlí při používání funkce.

Pří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 kompilace, klíč "test" neexistuje v Obj

Tímto způsobem druhá verze funkce zajišťuje typovou bezpečnost a zabraňuje chybám při kompilaci.