В 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);
// ...
}
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.