Callback функции

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Callback функции (функции обратного вызова) — это функции, которые передаются другим функциям в качестве аргументов. В TypeScript крайне важно правильно типизировать такие параметры, чтобы знать, какие аргументы принимает колбэк и что он возвращает. Синтаксис выглядит как стрелочная функция: (arg: number) => void.

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

Список тем

1. Порядок выполнения

id: 40658_ts_cb_analyze_01

Проанализируйте TypeScript-код сверху и восстановите последовательность шагов выполнения программы, включая вызов функции высшего порядка, выполнение её логики, вызов callback-функции и получение результата. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить логику работы программы.

function multiplyByTwo(num: number): number {
  return num * 2;
}

function processData(arr: number[], callback: (num: number) => number): number[] {
  const result: number[] = [];
  for (let i = 0; i < arr.length; i++) {
    result.push(callback(arr[i]));
  }
  return result;
}

const input = [1, 2, 3];
const output = processData(input, multiplyByTwo);
console.log(output);
Расположите элементы в логичном порядке
Объявляется функция высшего порядка processData, принимающая массив и колбэк
Вызывается функция processData с аргументами input и multiplyByTwo
Внутри processData для каждого элемента массива вызывается колбэк, результаты собираются в массив result
Создаётся входной массив input со значениями [1, 2, 3]
Вывод в консоль итогового массива output
Объявляется функция-колбэк multiplyByTwo, которая умножает число на 2
Сообщения
Проверить
Показать подсказку

2. Типизация аргумента

id: 40658_ts_cb_highlight_02

В объявлении функции TypeScript разметьте следующие элементы: ключевое слово 'function', имя функции, имя параметра callback, тип этого параметра (весь стрелочный тип) и тело функции. Это упражнение поможет вам лучше понимать синтаксис типизации callback-параметров в TypeScript.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
{{function~|~t1}} {{processData~|~t2}}({{callback~|~t3}}: {{(value: number) => string~|~t4}}) {{{\n    // ...\n}~|~t5}}
Имя функции
Ключевое слово
Тело функции
Имя параметра
Тип callback-параметра
Сообщения
Проверить
Показать подсказку

3. Описание сигнатуры

id: 40658_ts_cb_replace_03

В этом задании вам нужно дополнить сигнатуру callback-функции, указав правильные типы для её параметров и возвращаемого значения. Изучите, как callback используется в теле функции `processNumbers`, и определите типы на основе этого использования. Заполните пропуски так, чтобы код стал типобезопасным и компилировался без ошибок.

Заполните пропуски
function processNumbers(numbers: number[], callback: (value: input1S) => input2S): void {
  for (const num of numbers) {
    const result = callback(num);
    console.log(`Результат: ${result}`);
  }
}

// Пример использования
processNumbers([1, 2, 3], (x) => x * 2);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Результат вызова

id: 40658_ts_cb_predict_04

Проанализируйте приведённый код на TypeScript, содержащий функцию process с callback-аргументом. Внимательно проследите, как вызывается callback-функция и какие преобразования происходят с числом. Определите, какое значение будет выведено в консоль после выполнения программы.

Выберите правильный вариант ответа
function process(num: number, callback: (n: number) => number): number {
  return callback(num);
}

const double = (x: number) => x * 2;
const result = process(5, double);
console.log(result);
Сообщения
Проверить
Показать подсказку

5. Ошибка в аргументах

id: 40658_ts_cb_error_05

В этом фрагменте TypeScript-кода определена функция, принимающая колбэк. Колбэк ожидает строковый аргумент, но при вызове внутри функции ему передаётся число. Найдите строку с ошибкой и исправьте её, чтобы код соответствовал типам и вывел строку в консоль. Обратите внимание на тип параметра колбэка и передаваемый аргумент.

Найдите ошибку и исправьте
function process(callback: (value: string) => void) {
    callback(42);
}
 
process((value) => {
    console.log(value.toUpperCase());
});
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Сборка функции с колбэком

id: 40658_ts_cb_build_06

Из предложенных строк соберите корректное определение функции на TypeScript. Функция должна называться `run`, принимать один параметр `next` типа `() => void` (функция без параметров, возвращающая `void`) и вызывать этот параметр `next` внутри своего тела. Лишние строки в решение включать не нужно.

Перетяните в правильном порядке строки из одного блока в другой
function
run(next: () => void)
{
    next();
}
    console.log("Hello");
    return;
    let x: number = 5;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Тип возврата колбэка

id: 40658_ts_cb_select_fill_07

В данном фрагменте кода TypeScript объявлена переменная callback, которая является функцией без параметров, возвращающей значение. Результат вызова callback присваивается переменной result типа string. Выберите из списка правильный тип возвращаемого значения колбэка (ReturnType), чтобы код был корректен и не вызывал ошибок типизации.

Нужно правильно расставить в пропуски предложенные варианты
const callback: () => input1S = () => "test";
const result: string = callback();
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

TypeScript: компиляция и запуск

id: 40658_compiler

Демонстрация работы с callback-функциями в TypeScript. Здесь вы управляете обработкой массива данных — попробуйте изменить числа в массиве `data`, добавьте свои числа или попробуйте передать не число. Экспериментируйте: создайте свои callback-функции для фильтрации, сортировки или других преобразований данных и посмотрите, как изменится вывод. Увидьте, как одна функция `processNumbers` может выполнять разные задачи в зависимости от переданного callback.

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру