Sobes.tech
Middle+

түп Obiekt = { at: string жаш: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { at: "Nik", жаш: 25 } const value1 = getObjField(user, "at") 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 ичинде жок

Мындайча айтканда, экинчи версия функциянын түр коопсуздугун камсыздайт жана катачылыктарды алдын алат.