Middle+
/** * Գրեք getObjField ֆունկցիայի տիպավորումը * * @param obj - Օբյեկտից արժեք ստանալու օբյեկտ * @param key - Արժեքի բանալի * @returns Օբյեկտում համապատասխան բանալիի արժեքը */ type Obj = { name: string; age: number; }; const getObjField = <K extends keyof Obj>(obj: Obj, key: K): Obj[K] => { return obj[key]; }; const user: Obj = { name: "Nik", age: 25 }; const value1 = getObjField(user, "name"); const value2 = getObjField(user, "age"); const value3 = getObjField(user, "test"); // Խախտում: Տիպի '"test"' արգումենտը չի կարող վերագրել 'keyof Obj' տիպին։
sobes.tech AI
Պատասխան AI-ից
Чтобы типизировать функцию getObjField так, чтобы она принимала объект и ключ из этого объекта, и возвращала значение соответствующего типа, можно использовать дженерики и оператор keyof в TypeScript:
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
Такой подход гарантирует, что ключ существует в объекте, и возвращаемый тип соответствует типу поля.