Middle+
tips Obiekt = { vārds: string vecums: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { vārds: "Nik", vecums: 25 } const value1 = getObjField(user, "vārds") const value2 = getObjField(user, "vecums") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech AI
Atbilde no AI
Pirmās versijas getObjField parametrus irņo any tipā, kas neļauj pārbaudīt tipus 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 atslēga key patiešām pastāv objektā obj. 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"); // Kompilācijas kļūda, atslēga "test" neeksistē Obj
Tādējādi, otra versija nodrošina tipu drošību un novērš kļūdas kompilācijas laikā.