Для того чтобы тип аргумента совпадал с типом передаваемого ключа в TypeScript, можно использовать конструкцию keyof в сочетании с параметрами типа (generics) и typeof. Это позволяет определить тип аргумента на основе переданного ключа в объекте.
Вот пример реализации:
function getValueByKey<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; }
В этом примере мы используем два параметра типа: T для типа объекта и K для ключа. Ключ (параметр K) должен быть одним из ключей объекта (определенных как keyof T), чтобы тип аргумента совпадал с типом передаваемого ключа.
Функция getValueByKey
принимает объект obj
и ключ key
, и возвращает значение, соответствующее передаваемому ключу. Тип возвращаемого значения (T[K]
) будет совпадать с типом значения, связанного с переданным ключом.
Вот пример использования:
interface MyObject { name: string; age: number; isValid: boolean; } const obj: MyObject = { name: "John", age: 30, isValid: true, }; const name: string = getValueByKey(obj, "name"); // возвращает значение "John" типа string const age: number = getValueByKey(obj, "age"); // возвращает значение 30 типа number const isValid: boolean = getValueByKey(obj, "isValid"); // возвращает значение true типа boolean
Здесь мы определяем интерфейс MyObject
, который имеет три свойства: name
типа string
, age
типа number
и isValid
типа boolean
. Затем мы создаем объект obj
на основе этого интерфейса.
Затем мы вызываем функцию getValueByKey
с объектом obj
и ключом "name"
, "age"
и "isValid"
, и присваиваем возвращаемые значения переменным name
, age
и isValid
соответственно. Таким образом, тип аргумента будет совпадать с типом передаваемого ключа в каждом случае.
Результат: теперь у нас есть функция, которая позволяет нам получить значение из объекта, используя типизированный ключ. Это обеспечивает типовую безопасность и удобство при разработке на TypeScript.