Интерфейсы для функций

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

Тренажер по TypeScript

Интерфейсы в TypeScript могут описывать не только форму объектов, но и сигнатуры функций. Это мощный инструмент для создания контрактов в коде, особенно при работе с колбэками или сложными API.

Синтаксис интерфейса для функции выглядит как определение функции без тела: в скобках указываются параметры и их типы, а после двоеточия — возвращаемый тип. Например: (source: string, subString: string): boolean;. Используя такие интерфейсы, вы гарантируете, что любая функция, реализующая этот интерфейс, будет строго соответствовать заданной структуре аргументов и возвращаемого значения. В этом уроке мы попрактикуемся в создании и использовании функциональных интерфейсов.

Список тем

1. Структура сигнатуры

id: 40682_func_int_01_highlight

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

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
{{interface~|~t1}} {{Add~|~t2}} {
{{(x: number, y: number)~|~t3}}: {{number~|~t4}};
}
Тип возвращаемого значения
Ключевое слово
Имя интерфейса
Список параметров
Сообщения
Проверить
Показать подсказку

2. Определение интерфейса

id: 40682_func_int_02_replace

В этом задании вам нужно определить интерфейс для функции поиска элемента в массиве. Функция принимает два параметра: массив чисел и число для поиска, а возвращает булево значение, указывающее, найдено ли число в массиве. Заполните пропуски в коде, указав правильные типы для параметров и возвращаемого значения. Обратите внимание, что тип массива чисел можно записать двумя способами: number[] или Array.

Заполните пропуски
interface SearchFunc {
  (source: input1S, searchValue: input2S): input3S;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Сопоставление интерфейсов

id: 40682_func_int_03_compare

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

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
IComparator
ILogger
IEventHandler
ITransformer
IPredicate
(event: Event) => void
(value: T) => boolean
(message: string) => void
(input: T) => U
(a: T, b: T) => number
Сообщения
Проверить
Показать подсказку

4. Сборка реализации

id: 40682_func_int_04_build

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

Перетяните в правильном порядке строки из одного блока в другой
interface MathOperation {
    (a: number, b: number): number;
}
let add: MathOperation;
add = (x: number, y: number): number => {
    return x + y;
};
let multiply: MathOperation;
multiply = (x: number, y: number): number => {
    return x * y;
};
let subtract: (a: number, b: number) => string;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Несоответствие типов

id: 40682_func_int_05_error

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

Найдите ошибку и исправьте
interface MathOperation {
  (x: number, y: number): number;
}
 
let add: MathOperation = function(x: number, y: number): string {
  return (x + y).toString();
};
 
console.log(add(5, 3));
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Типизация колбэка

id: 40682_func_int_06_select

В этом задании вам нужно правильно типизировать параметр функции, который является колбэком. В коде ниже функция processUserInput принимает колбэк, который должен обрабатывать число (id пользователя) и возвращать строку (имя пользователя). Используя выпадающие списки, выберите подходящий интерфейс для колбэка и типы его параметра и возвращаемого значения, чтобы код работал корректно.

Нужно правильно расставить в пропуски предложенные варианты
interface input1S {
  (id: input2S): input3S;
}

function processUserInput(callback: input1S) {
  const userId = 42;
  const userName = callback(userId);
  console.log(`User name is: ${userName}`);
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 40682_func_int_07_give_result

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

Что должно получиться?
interface Operation {
  (a: number, b: number): number;
}

const multiply: Operation = (a, b) => a * b;

console.log(multiply(7, 6));
Сообщения
Проверить
Показать подсказку

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

id: 40682_compiler

Интерфейсы могут описывать не только структуру объектов, но и правила для вызова функций! В этом примере мы создаем строгий контракт для математических операций. Попробуйте изменить логику функции `multiply` или создайте свою функцию `power` (возведение в степень) на основе этого же интерфейса. Экспериментируйте: попробуйте вернуть из функции строку вместо числа или изменить количество аргументов, чтобы увидеть, как TypeScript защищает ваш код от типичных ошибок!

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