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-ში

ამ გზით, მეორე ვარიანტი უზრუნველყოფს ტიპების უსაფრთხოებას და თავიდან აცილებს შეცდომებს კომპილაციის დროს.