Зарегистрируйтесь, чтобы продолжить обучение

Функции как параметры Основы Typescript

В TypeScript используется несколько способов типизировать функции, которые передаются как параметры. В этом уроке мы научимся работать с ними.

Как типизировать функции, которые передаются как параметры

Самый простой способ типизировать функции как параметры — использовать тип Function. Он описывает функцию JavaScript со всеми ее особенностями, включая свойства bind, call и apply.

function process(callback: Function) {
  const value = callback()
  // ...
}

Здесь видно, что Function отключает проверку типов для вызываемой функции. В итоге количество и тип входных аргументов не проверяются, а результатом работы такой функции будет any. Поэтому рекомендуем избегать Function.

// Сработает, хотя по смыслу не должно
// Внутри Math.round вызовется без аргументов
process(Math.round)

Другой способ описывать функции — использовать стрелочную функцию с указанием входных и выходных типов:

function process(callback: () => string) {
  // value имеет тип string
  const value = callback()
  // ...
}

process(Math.round)
// Argument of type '(x: number) => number' is not
// assignable to parameter of type '() => string'.

Определение типа стрелочной функции похоже на обычное определение функции, но тут важно не перепутать. Здесь мы видим именно описание типа, а не определение функции.

Рассмотрим еще несколько примеров для закрепления:

function process(callback: () => number)
function process(callback: () => string[])
function process(callback: () => { firstName: string })

Пример с параметрами:

function process(callback: (n: number) => string) {
  const value = callback(10)
  // ...
}

Если определение функции встречается часто, то для него можно создать псевдоним:

type myFunction = (n: number) => string

function process(callback: myFunction) {
  const value = callback(10)
  // ...
}

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff