DevGang
Авторизоваться

Функция с динамически типизируемыми параметрами в Typescript.

А вы задумывались хотя бы раз, как в Typescript создать функцию, возвращающую тот тип, который сам получает?

  • Если мы явно не задаем параметр, функция возвращает тип «any».
  • Если мы его установим, функция вернет фиксированный тип в параметре.

Итак, рассмотрим как с этим справиться.

В приведенном ниже примере мы объявляем функцию, которая получает параметр и возвращает сам параметр. Этот параметр не был задан явно, поэтому при вызове функции возвращаемое значение имеет тип «any».

Мы передали число в качестве параметра нашей функции, и эта функция просто возвращает этот параметр, поэтому значение должно быть числом, верно? Ну, к сожалению, Typescript «не понимает» его таким образом.

Чтобы справиться с этим, мы можем использовать Generics от Typescript.

Generics в Typescript

Мы будем использовать Generics, но что такое Generics?

Документация Typescript объясняет Generics следующим образом:

«(...) возможность создать компонент, который может работать с несколькими типами, а не с одним».

Проведя рефакторинг кода, наша функция теперь получила переменную типа Type, своего рода переменную, которая работает с типами, а не со значениями. Этот Type позволяет нам фиксировать тип, который сообщает пользователь. И в этом примере мы объявляем этот Type как тип возвращаемого значения функции.

Итак, если мы передадим число в нашу функцию, она вернет число, если мы передадим строку, она вернет строку, если мы передадим объект с некоторыми атрибутами (как в примере выше), он вернет объект с введенными значениями. То же самое относится к массиву и другим типам.

Таким образом, наша функция будет применять типы независимо от того, что мы передаем в качестве параметра. Это позволяет нам создавать функции, которые можно использовать в различных контекстах, делая функцию более многоразовой.

Стоит отметить, что, несмотря на эту особенность Typescript, всегда интересно стараться быть декларативным при наборе текста. Итак, эту функцию следует использовать с осторожностью.

#TypeScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить