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
+24-5Lines changed: 24 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -10,11 +10,9 @@ theory: |
10
10
function concat(a: string, b: string): string;
11
11
12
12
function concat(a: any, b: any): string {
13
-
if (typeof a === 'string') {
14
-
return `${a}${b}`;
15
-
} else {
16
-
return `${a.toFixed()}${b.toFixed()}`;
17
-
}
13
+
return typeof a === 'string'
14
+
? `${a}${b}`
15
+
: `${a.toFixed()}${b.toFixed()}`
18
16
}
19
17
20
18
concat('one', 'two'); // onetwo
@@ -27,6 +25,27 @@ theory: |
27
25
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `any`, что дает возможность вызывать функцию как со строками, так и с числами.
28
26
29
27
Вся логика, для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
28
+
29
+
Для перезагрузки не обязательно использовать объявление функций, все то же самое можно сделать при помощи стрелочной функции:
Перегрузка функций не ограничивается двумя версиями. Версий может быть сколько угодно, главное то, что в конце всегда описывается функция, которая является общей по параметрам для всех вариантов и внутри которой описывается вся логика для каждого варианта.
0 commit comments