Sobes.tech
Middle+

const X = { a: 1, b: 2, c: 3, d: 4 } function getProperty<T>(obj: T, key: keyof T) { // Tapşırıq funksiyanı tipikləşdirin return obj[key] } getProperty(X, 'a') // xəta yoxdur getProperty(X, 'e') // xəta, 'e' açarı X üçün açar deyil getProperty({ name: 'Sergey' }, 'name') // xəta yoxdur getProperty(1, 1) // Xəta. Birinci arqument obyekt olmalıdır (funksiya və ya primitiv deyil)

sobes.tech Süni İntellekt

AI-dan cavab

Чтобы типизировать функцию 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 не объект

Это обеспечивает строгую типизацию и предотвращает ошибки на этапе компиляции.