Функция с динамически типизируемыми параметрами в Typescript.
А вы задумывались хотя бы раз, как в Typescript создать функцию, возвращающую тот тип, который сам получает?
- Если мы явно не задаем параметр, функция возвращает тип «any».
- Если мы его установим, функция вернет фиксированный тип в параметре.
Итак, рассмотрим как с этим справиться.
В приведенном ниже примере мы объявляем функцию, которая получает параметр и возвращает сам параметр. Этот параметр не был задан явно, поэтому при вызове функции возвращаемое значение имеет тип «any».
Мы передали число в качестве параметра нашей функции, и эта функция просто возвращает этот параметр, поэтому значение должно быть числом, верно? Ну, к сожалению, Typescript «не понимает» его таким образом.
Чтобы справиться с этим, мы можем использовать Generics от Typescript.
Generics в Typescript
Мы будем использовать Generics, но что такое Generics?
Документация Typescript объясняет Generics следующим образом:
«(...) возможность создать компонент, который может работать с несколькими типами, а не с одним».
Проведя рефакторинг кода, наша функция теперь получила переменную типа Type, своего рода переменную, которая работает с типами, а не со значениями. Этот Type позволяет нам фиксировать тип, который сообщает пользователь. И в этом примере мы объявляем этот Type как тип возвращаемого значения функции.
Итак, если мы передадим число в нашу функцию, она вернет число, если мы передадим строку, она вернет строку, если мы передадим объект с некоторыми атрибутами (как в примере выше), он вернет объект с введенными значениями. То же самое относится к массиву и другим типам.
Таким образом, наша функция будет применять типы независимо от того, что мы передаем в качестве параметра. Это позволяет нам создавать функции, которые можно использовать в различных контекстах, делая функцию более многоразовой.
Стоит отметить, что, несмотря на эту особенность Typescript, всегда интересно стараться быть декларативным при наборе текста. Итак, эту функцию следует использовать с осторожностью.