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ā.