Sobes.tech
Middle+

tip Obekt = { ad: string yaş: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obekt = { ad: "Nik", yaş: 25 } const value1 = getObjField(user, "ad") const value2 = getObjField(user, "yaş") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech Süni İntellekt

AI-dan cavab

getObjField funksiyasının ilk variantında parametrlər any tipindədir, bu da tiplərin yoxlanmasına imkan vermir və məsələn, mövcud olmayan açarına müraciət zamanı səhvlərə səbəb ola bilər.

İkinci variantda, K extends keyof T məhdudiyyəti ilə generik istifadə olunur, bu da key açarının həqiqətən obj obyektində mövcud olduğunu təmin edir. Bu, funksiyanın təhlükəsizliyini və istifadəsini asanlaşdırır.

Misal:

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"); // tip: string
const value2 = getObjField(user, "age");  // tip: number
// const value3 = getObjField(user, "test"); // Komilash xatosu, "test" açarı Obj-də mövcud deyil

Bu şəkildə, ikinci versiya funksiyanın tip təhlükəsizliyini təmin edir və komilash mərhələsində səhvlərin qarşısını alır.