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
По този начин, вторият вариант на функцията осигурява типова безопасност и предотвратява грешки при компилация.