Sobes.tech
Middle+

tüüp Obiekt = { nimi: string vanus: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { nimi: "Nik", vanus: 25 } const value1 = getObjField(user, "nimi") const value2 = getObjField(user, "vanus") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech AI

Vastus AI-lt

Esimeses versijas getObjField parametri ir any tipā, kas neļauj veikt tipu pārbaudi un var novest pie kļūdām, piemēram, piekļūstot neeksistējošai atslēgai.

Otrajā versijā tiek izmantots ģenerisks ar ierobežojumu K extends keyof T, kas garantē, ka key atslēga patiešām pastāv obj objektā. Tas palielina funkcijas drošību un ērtumu.

Piemērs:

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"); // tips: string
const value2 = getObjField(user, "age");  // tips: number
// const value3 = getObjField(user, "test"); // Kļūda kompilācijā, atslēga "test" neeksistē Obj

Tādējādi, otra versija nodrošina tipu drošību un novērš kļūdas kompilācijas laikā.