Sobes.tech
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-ում

Այսպիսով, երկրորդ տարբերակը ապահովում է տիպային անվտանգություն և կանխում է սխալները կոմպիլյացիայի ժամանակ։