Sobes.tech
Middle+

тип Obiekt = { име: string възраст: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { име: "Nik", възраст: 25 } const value1 = getObjField(user, "име") const value2 = getObjField(user, "възраст") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech AI

Отговор от AI

В първия вариант на функцията getObjField параметрите имат тип any, което не позволява проверка на типовете и може да доведе до грешки, например при достъп до не съществуващ ключ.

Във втория вариант се използва генерик с ограничение K extends keyof T, което гарантира, че ключът key действително съществува в обекта obj. Това увеличава безопасността и удобството при използване на функцията.

Пример:

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"); // тип: string
const value2 = getObjField(user, "age");  // тип: number
// const value3 = getObjField(user, "test"); // Грешка при компилиране, ключът "test" не съществува в Obj

По този начин, вторият вариант на функцията осигурява типова безопасност и предотвратява грешки при компилация.