Middle+
tip Obiekt = { ime: string starost: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { ime: "Nik", starost: 25 } const value1 = getObjField(user, "ime") const value2 = getObjField(user, "starost") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech АИ
Одговор од АИ
U prvom variantu funkcije getObjField, parametri imaju tip any, što ne omogućava proveru tipova i može dovesti do grešaka, na primer, prilikom pristupa nepostojećem ključu.
U drugom variantu, koristi se generički tip sa ograničenjem K extends keyof T, što garantuje da ključ key zaista postoji u objektu obj. To povećava sigurnost i udobnost korišćenja funkcije.
Primer:
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"); // Greška pri kompilaciji, ključ "test" ne postoji u Obj
Na ovaj način, druga verzija funkcije obezbeđuje sigurnost tipova i sprečava greške pri kompilaciji.