Перейти к основному содержимому

Функции в TypeScript

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

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


Тип возвращаемого значения

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

Примечание: Если вы не напишете тип возвращаемого значения, TypeScript попытается вывести его — он определит тип по значениям, которые возвращает функция.

Пример

Запись : number после скобок говорит, что getTime возвращает число.

Prompt
Покажите, как явно объявить тип возвращаемого значения функции. Напишите функцию getTime с аннотацией возвращаемого типа number, тело которой возвращает new Date().getTime(), с комментарием, объясняющим аннотацию : number. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

Тип возвращаемого значения void

Используйте тип void, чтобы указать, что функция не возвращает никакого значения.

Пример

Prompt
Покажите тип возвращаемого значения void для функции, которая ничего не возвращает. Напишите функцию printHello с аннотацией возвращаемого типа void, тело которой выводит в журнал «Привет!». Только объявите функцию; не вызывайте её, чтобы ничего не выводилось.
Вывод: программа на TypeScript и захваченный вывод

Параметры

Параметры функции получают типы с помощью того же синтаксиса, что и объявления переменных: двоеточие и тип после имени.

Примечание: Если у параметра нет типа, TypeScript использует тип any — если только он не может найти тип в другом месте, как показано ниже в разделах «Параметры по умолчанию» и «Псевдоним типа».

Пример

Prompt
Покажите, как параметры функции получают аннотации типов. Напишите функцию multiply с двумя параметрами a и b типа number, которая возвращает их произведение, позволив TypeScript вывести тип возвращаемого значения. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

Необязательные параметры

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

Пример

Знак ? делает c необязательным, поэтому add можно вызывать с двумя или тремя аргументами.

Prompt
Покажите, как пометить параметр функции как необязательный с помощью ?. Напишите функцию add с обязательными параметрами a и b типа number и необязательным параметром c типа number, возвращающую a + b + (c || 0), с комментарием, объясняющим ?. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

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

Для параметра со значением по умолчанию напишите это значение после аннотации типа.

TypeScript также может вывести тип параметра только по значению по умолчанию.

Пример

exponent имеет тип number и по умолчанию равен 10, если значение не передано.

Prompt
Покажите параметр, у которого есть и аннотация типа, и значение по умолчанию. Напишите функцию pow с параметром value типа number и параметром exponent типа number, значение которого по умолчанию равно 10, возвращающую value ** exponent. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

Именованные параметры

Именованные параметры — значения, извлечённые из одного объекта-аргумента — типизируются так же, как обычные параметры: тип указывается после шаблона деструктуризации.

Пример

Prompt
Покажите, как типизировать именованные (деструктурированные) параметры. Напишите функцию divide, которая деструктурирует dividend и divisor из единственного параметра-объекта с типом { dividend: number, divisor: number } и возвращает dividend / divisor. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

Остаточные параметры

Остаточный параметр собирает все дополнительные аргументы. Он типизируется как обычный параметр, но его тип должен быть массивом, потому что остаточный параметр — это всегда массив.

Пример

...rest имеет тип number[], поэтому каждый дополнительный аргумент должен быть числом.

Prompt
Покажите, как типизировать остаточный параметр как массив. Напишите функцию add с параметрами a и b типа number и остаточным параметром ...rest типа number[], возвращающую a + b плюс сумму rest, вычисленную с помощью reduce. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод

Псевдоним типа

Тип функции можно записать отдельно от самой функции, используя псевдоним типа.

Такие типы выглядят как стрелочные функции: параметры в скобках, затем => и тип возвращаемого значения.

Пример

Поскольку negateFunction имеет тип Negate, его параметр value автоматически получает тип number.

Prompt
Покажите тип функции, определённый отдельно с помощью псевдонима типа. Объявите псевдоним типа Negate для функции, принимающей number и возвращающей number, затем присвойте стрелочную функцию (value) => value * -1 константе negateFunction типа Negate, добавив комментарий о том, что value получает свой тип из псевдонима. Пример только объявляет функцию и ничего не выводит.
Вывод: программа на TypeScript и захваченный вывод