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 ичинде жок
Мындайча айтканда, экинчи версия функциянын түр коопсуздугун камсыздайт жана катачылыктарды алдын алат.