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.