Middle+
type Obj = { nom: string yosh: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obj = { nom: "Nik", yosh: 25 } const value1 = getObjField(user, "nom") const value2 = getObjField(user, "yosh") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech AI
AIdan javob
getObjField funksiyasining birinchi variantida parametrlar any turida bo'lib, bu tur tekshirishga imkon bermaydi va masalan, mavjud bo'lmagan kalitga murojaat qilishda xatoliklar yuzaga kelishi mumkin.
Ikkinchi variantda, K extends keyof T cheklov bilan generik ishlatiladi, bu key kalitining haqiqatan ham obj ob'ektida mavjudligini kafolatlaydi. Bu funksiyaning xavfsizligini va qulayligini oshiradi.
Misol:
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"); // tur: string
const value2 = getObjField(user, "age"); // tur: number
// const value3 = getObjField(user, "test"); // Komilash xatosi, "test" kaliti Obj da mavjud emas
Shu tarzda, ikkinchi variant funksiyaning tur xavfsizligini ta'minlaydi va komilash bosqichida xatoliklarni oldini oladi.