Middle+
const X = { a: 1, b: 2, c: 3, d: 4 } function getProperty<T>(obj: T, key: keyof T) { // დავალება: ფუნქციის ტიპიზაცია return obj[key] } getProperty(X, 'a') // შეცდომა არაა getProperty(X, 'e') // შეცდომა: გასაღები 'e' არ არის ობიექტის X გასაღები getProperty({ name: 'Sergey' }, 'name') // შეცდომა არაა getProperty(1, 1) // შეცდომა. პირველი არგუმენტი უნდა იყოს ობიექტი (არა ფუნქცია და არა primitives)
sobes.tech AI
პასუხი AI-სგან
Чтобы типизировать функцию getProperty так, чтобы:
- Первый аргумент был объектом (не примитивом и не функцией),
- Второй аргумент был ключом этого объекта,
- Возвращаемое значение соответствовало типу свойства по ключу,
можно использовать условные типы и ограничения в TypeScript.
Пример типизации:
function getProperty<T extends object, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
Здесь:
T extends objectгарантирует, чтоobj— объект,K extends keyof Tгарантирует, чтоkey— ключ объектаT,- Возвращаемый тип
T[K]соответствует типу значения по ключу.
Таким образом, вызовы:
getProperty(X, 'a'); // OK
getProperty(X, 'e'); // Ошибка, 'e' нет в ключах X
getProperty({ name: 'Sergey' }, 'name'); // OK
getProperty(1, 1); // Ошибка, 1 не объект
Это обеспечивает строгую типизацию и предотвращает ошибки на этапе компиляции.