Перейти к основному содержимому
Модуль 3 · Урок 1 из 25/14 в курсе~12 min
Уроки модуля (1/2)

Типизированные функции

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


Необязательные параметры и параметры по умолчанию

В JavaScript каждый параметр является необязательным и по умолчанию имеет значение undefined, если он опущен. В TypeScript по умолчанию каждый объявленный параметр является обязательным.

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

1. Дополнительные параметры

Необязательные параметры должны располагаться после всех обязательных параметров:

TS
function greetUser(name: string, title?: string): string {
  if (title) {
    return `Good morning ${title} ${name}`;
  }
  return `Hello ${name}`;
}

2. Параметры по умолчанию

Если для параметра со значением по умолчанию не указано значение, TypeScript определяет его тип и присваивает указанное значение по умолчанию:

TS
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
  return `${prefix} ${name}`;
}

Остальные параметры (...args)

Если мы хотим принять переменное количество аргументов, мы можем использовать оператор rest. В TypeScript эти параметры необходимо вводить в виде массива:

TS
function sumAll(message: string, ...numbers: number[]): string {
  const total = numbers.reduce((sum, n) => sum + n, 0);
  return `${message} ${total}`;
}

Типы функций (подписи вызовов)

Мы можем определить тип функции независимо, а затем повторно использовать его в объявлениях переменных или аргументах обратного вызова:

TS
// Define function type using type alias
type MathOperation = (a: number, b: number) => number;

const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;

Этот подход важен при передаче функций в качестве аргументов другим функциям (обратные вызовы).


Попробуйте сами

Упражнение 1. Необязательные параметры

Упражнение#ts.m3.l1.e1
Попыток: 0Загрузка…

Создайте функцию с именем formatName, которая принимает параметр firstName (строка) и необязательный параметр LastName (строка). Если указана фамилия, верните «firstName LastName», в противном случае верните только «firstName».

Загрузка редактора…
Показать подсказку

Помните, что необязательный параметр объявляется с использованием строки LastName?: после обязательного.

Решение доступно после 3 попыток

Упражнение 2. Параметры по умолчанию

Упражнение#ts.m3.l1.e2
Попыток: 0Загрузка…

Создайте функцию с именем power, которая принимает основание (число) и показатель степени (число со значением по умолчанию 2). Функция должна вычислить и вернуть значение основания, возведенного в степень (используйте Math.pow).

Загрузка редактора…
Показать подсказку

Используйте базу: число и показатель степени: число = 2 в сигнатуре функции.

Решение доступно после 3 попыток

Упражнение 3. Сигнатура функции

Упражнение#ts.m3.l1.e3
Попыток: 0Загрузка…

Определите псевдоним типа с именем BinaryOp, который описывает функцию, принимающую два числовых параметра и возвращающую число. Затем объявите константу с именем sum типа BinaryOp, реализующую сложение.

Загрузка редактора…
Показать подсказку

Синтаксис типа функции: (a: число, b: число) => число.

Решение доступно после 3 попыток

Упражнение 4. Функция обратного вызова

Упражнение#ts.m3.l1.e4
Попыток: 0Загрузка…

Создайте функцию с именемprocessItems, которая принимает два параметра: items (массив строк) и обратный вызов (функция, которая принимает одну строку и ничего не возвращает, т. е. void). Функция должна выполнить цикл for...of для каждого элемента в items и передать его обратному вызову.

Загрузка редактора…
Показать подсказку

Объявите подпись какprocessItems(items: string[], callback: (item: string) => void): void и используйте цикл для вызова обратного вызова.

Решение доступно после 3 попыток