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-ում
Այսպիսով, երկրորդ տարբերակը ապահովում է տիպային անվտանգություն և կանխում է սխալները կոմպիլյացիայի ժամանակ։