Sobes.tech
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.