Sobes.tech
Middle+

tipas Obiekt = { vardas: string amžius: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { vardas: "Nik", amžius: 25 } const value1 = getObjField(user, "vardas") const value2 = getObjField(user, "amžius") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech AI

Atsakymas iš AI

Pirmoje funkcijos getObjField versijoje parametrai turi any tipą, kas neleidžia tikrinti tipų ir gali sukelti klaidų, pavyzdžiui, prieinant prie neegzistuojančio rakto.

Antroje versijoje naudojamas generinis tipas su apribojimu K extends keyof T, kuris užtikrina, kad raktas key tikrai egzistuoja objekte obj. Tai didina funkcijos saugumą ir patogumą.

Pavyzdys:

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"); // tipas: string
const value2 = getObjField(user, "age");  // tipas: number
// const value3 = getObjField(user, "test"); // Kompilacijos klaida, raktas "test" neegzistuoja Obj

Taip, antroji funkcijos versija užtikrina tipų saugumą ir neleidžia klaidų kompiliacijos metu.