You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: modules/20-functions/85-function-overloads/description.ru.yml
+7-7
Original file line number
Diff line number
Diff line change
@@ -9,12 +9,12 @@ theory: |
9
9
function concat(a: number, b: number): string;
10
10
function concat(a: string, b: string): string;
11
11
12
-
function concat(a: any, b: any): string {
13
-
if (typeof a === 'string') {
14
-
return `${a}${b}`;
15
-
} else {
12
+
function concat(a: unknown, b: unknown): string {
13
+
if (typeof a === 'number') {
16
14
return `${a.toFixed()}${b.toFixed()}`;
17
15
}
16
+
17
+
return `${a}${b}`;
18
18
}
19
19
20
20
concat('one', 'two'); // onetwo
@@ -24,9 +24,9 @@ theory: |
24
24
25
25
Здесь определяется одна функция `concat()`, у которой две версии, одна принимает на вход два числа, другая две строки. Обе версии выполняют конкатенацию, но делают это по-разному. Строки конкатенируются сразу, а вот у чисел сначала отбрасывается дробная часть.
26
26
27
-
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `any`, что дает возможность вызывать функцию как со строками, так и с числами.
27
+
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `unknown`, что дает возможность вызывать функцию как со строками, так и с числами.
28
28
29
-
Вся логика, для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
29
+
Вся логика для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
30
30
31
31
Перегрузка функций не ограничивается двумя версиями. Версий может быть сколько угодно, главное то, что в конце всегда описывается функция, которая является общей по параметрам для всех вариантов и внутри которой описывается вся логика для каждого варианта.
32
32
@@ -36,7 +36,7 @@ theory: |
36
36
function add(a: string, b: string): string;
37
37
38
38
// Сигнатура подходит под все примеры выше
39
-
function add(a: any, b: any, c?: number): unknown {
39
+
function add(a: unknown, b: unknown, c?: number): unknown {
0 commit comments