Middle+
типы Obiekt = { номи: string ёш: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { номи: "Nik", ёш: 25 } const value1 = getObjField(user, "номи") const value2 = getObjField(user, "ёш") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech AI
Ҷавоб аз AI
Дар аввал версияи функсияи getObjField, параметрҳо намудҳои any доранд, ки имкон намедиҳад, ки намудҳоро санҷиш кардан мумкин бошад ва метавонад ба хатоҳо оварда расонад, масалан, дар дастрасӣ ба калиди номувофиқ.
Дар версияи дуввум, як генерик бо маҳдудияти K extends keyof T истифода мешавад, ки кафолат медиҳад, ки калиди key воқеан дар объект obj мавҷуд аст. Ин амният ва истифодаи қулайро беҳтар мекунад.
Масалан:
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"); // навъ: string
const value2 = getObjField(user, "age"); // навъ: number
// const value3 = getObjField(user, "test"); // Хатои компилятсия, калиди "test" дар Obj вуҷуд надорад
Инчунин, версияи дуввум, амнияти навъҳоро таъмин мекунад ва хатогиҳоро дар марҳилаи компилятсия пешгирӣ мекунад.