Функции в TypeScript
В этой статье объясняются функции в TypeScript.
YouTube Video
Функции в TypeScript
Функции в TypeScript — это функции JavaScript с добавленными аннотациями типов. В TypeScript вы можете писать более надежный код, четко определяя типы входных данных (параметров) и выходных данных (возвращаемых значений) для функций. Ниже мы познакомимся с основными методами определения функций и некоторыми характеристиками функций в TypeScript.
Основное определение функций
1function add(x: number, y: number): number {
2 return x + y;
3}
4
5console.log(add(5, 10)); // 15
- Функция
add
принимает два аргумента типаnumber
и возвращает значение типаnumber
. - Она принимает два аргумента,
x
иy
, оба типаnumber
, с явно указанными типами. - Тип возвращаемого значения также указан как
: number
.
Анонимные функции (функциональные выражения)
Анонимные функции и функциональные выражения также можно использовать в TypeScript. Типы могут быть аннотированы аналогичным образом.
1const multiply = function (x: number, y: number): number {
2 return x * y;
3};
4
5console.log(multiply(3, 4)); // 12
- Вы можете присвоить анонимную функцию переменной и вызвать её позже.
1const factorial = function fact(n: number): number {
2 if (n <= 1) return 1;
3 return n * fact(n - 1); // Can call itself recursively
4};
5
6console.log(factorial(5)); // 120
- Вы можете использовать именованное функциональное выражение для рекурсивных вызовов.
Функции-стрелки
Аннотации типов также можно использовать с функциями-стрелками.
1const subtract = (x: number, y: number): number => {
2 return x - y;
3};
4
5console.log(subtract(10, 4)); // 6
Этот код определяет стрелочную функцию subtract
с аннотациями типа, которая принимает два числа в качестве аргументов и возвращает их разность.
Необязательные и параметры по умолчанию
Параметры могут быть сделаны необязательными или иметь значения по умолчанию.
Необязательные параметры
Добавление ?
после имени параметра делает его необязательным.
1function greet(name?: string): string {
2 return name ? `Hello, ${name}` : "Hello!";
3}
4
5console.log(greet()); // Hello!
6console.log(greet("Alice")); // Hello, Alice
Этот код принимает необязательный аргумент; если аргумент указан, приветствует по имени, иначе возвращает общее приветствие.
Параметры по умолчанию
Вы также можете задать параметры значения по умолчанию.
1function greetWithDefault(name: string = "Guest"): string {
2 return `Hello, ${name}`;
3}
4
5console.log(greetWithDefault()); // Hello, Guest
6console.log(greetWithDefault("Bob")); // Hello, Bob
Эта функция использует "Гость" в качестве значения по умолчанию, если аргумент не передан, и приветствует, используя указанное или стандартное имя.
Определение типа функции
Также можно определить тип самой функции. Например, это используется при передаче функции в качестве аргумента.
1type Operation = (x: number, y: number) => number;
2
3const addOperation: Operation = (x, y) => x + y;
4const multiplyOperation: Operation = (x, y) => x * y;
5
6console.log(addOperation(2, 3)); // 5
7console.log(multiplyOperation(2, 3)); // 6
Этот код определяет тип функции Operation
, который принимает два числа и возвращает число, затем использует его для создания и выполнения функций сложения и умножения.
Когда нет возвращаемого значения (тип void
)
Для функций без возвращаемого значения укажите тип void
.
1function logMessage(message: string): void {
2 console.log(message);
3}
4
5logMessage("This is a message."); // This is a message.
Этот код определяет функцию void
logMessage
, которая принимает строковое сообщение и выводит его в консоль, не возвращая значения.
Функция обратного вызова
Передача функции в качестве аргумента другой функции с последующим её выполнением называется функцией обратного вызова. Она часто используется при асинхронной обработке и обработке событий.
1function processData(callback: (data: string) => void): void {
2 const data: string = "Processed Data";
3 callback(data);
4}
5
6processData((result: string): void => {
7 console.log(result);
8});
В этом примере функция, которая выводит значение в консоль, передаётся как функция обратного вызова.
В качестве альтернативы вы можете определить тип функции обратного вызова с помощью type
или interface
.
1type Callback = (data: string) => void;
2
3function processData(callback: Callback): void {
4 const data: string = "Processed Data";
5 callback(data);
6}
7
8processData((result: string): void => {
9 console.log(result);
10});
Определение типа функции обратного вызова с помощью type
или interface
повышает её переиспользуемость.
Перегрузка функций
Перегрузка функций позволяет определять функции с одинаковыми именами, но с разными списками параметров. В TypeScript вы можете определить несколько функций с одинаковым именем и выполнять разные операции в зависимости от типов и количества параметров.
1// Overload Signature
2function double(value: number): number;
3function double(value: string): string;
4
5// Implementation Signature
6function double(value: number | string): number | string {
7 if (typeof value === "number") {
8 return value * 2;
9 } else if (typeof value === "string") {
10 return value + value;
11 }
12}
13
14console.log(double(10)); // 20
15console.log(double("Hello")); // HelloHello
В TypeScript перегрузка реализуется следующим образом:.
-
Сигнатура перегрузки
- Определяет, как может использоваться функция (ее сигнатура). Путем многократного указания этой сигнатуры становится возможной перегрузка.
-
Сигнатура реализации
- Реализует тело функции. Эта часть определяется только один раз и обрабатывает все случаи, указанные в сигнатурах перегрузки.
Правила перегрузки
К перегрузке функций применяются следующие правила:.
-
Порядок определения сигнатур перегрузки
- Поскольку оценка происходит сверху вниз, рекомендуется сначала определять более конкретные типы, а затем более общие.
-
Совместимость сигнатуры реализации
- Сигнатура реализации должна быть совместима с аргументами и возвращаемыми значениями всех сигнатур перегрузки.
-
Укажите детали в сигнатурах перегрузки
- Сигнатура реализации зачастую бывает неоднозначной, поэтому детали следует указывать в сигнатурах перегрузки.
- Если определена только сигнатура реализации, вывод типов для функции будет недостаточным.
Резюме
Функции в TypeScript имеют следующие характеристики.
- Аннотации типов
- Указывая типы для аргументов и возвращаемых значений, вы можете писать более безопасный код.
- Анонимные функции и стрелочные функции
- Их можно использовать так же, как и в JavaScript, а добавление аннотаций типов повышает безопасность типов.
- Необязательные и параметры по умолчанию
- Вы можете сделать спецификацию аргументов более гибкой при необходимости.
- Определения типов функций
- Определите тип самой функции для выполнения проверки типов.
- Перегрузка функций
- Вы можете поддерживать различные аргументы с одним и тем же именем функции.
Используя это, вы можете писать более понятный и надежный код на TypeScript.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.