Skip to content

Commit 647a7cd

Browse files
authored
Добавлен синтаксис для стрелочных функций
Добавлен синтаксис для стрелочных функций, конструкция if/else заменена на тернарник
1 parent c6e644b commit 647a7cd

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

modules/20-functions/85-function-overloads/description.ru.yml

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ theory: |
1010
function concat(a: string, b: string): string;
1111
1212
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()}`
1816
}
1917
2018
concat('one', 'two'); // onetwo
@@ -27,6 +25,27 @@ theory: |
2725
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `any`, что дает возможность вызывать функцию как со строками, так и с числами.
2826
2927
Вся логика, для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
28+
29+
Для перезагрузки не обязательно использовать объявление функций, все то же самое можно сделать при помощи стрелочной функции:
30+
31+
```
32+
const concat: {
33+
(a: number, b: number): string;
34+
(a: string, b: string): string;
35+
} = (a: unknown, b: unknown) => (
36+
typeof a === 'string'
37+
? `${a}${b}`
38+
: `${a.toFixed()}${b.toFixed()}`
39+
)
40+
41+
// с использованием алиасов
42+
type Overloaded = {
43+
(a: number, b: number): string;
44+
(a: string, b: string): string;
45+
}
46+
47+
const concat: Overloaded = (a: unknown, b: unknown) {...}
48+
```
3049
3150
Перегрузка функций не ограничивается двумя версиями. Версий может быть сколько угодно, главное то, что в конце всегда описывается функция, которая является общей по параметрам для всех вариантов и внутри которой описывается вся логика для каждого варианта.
3251

0 commit comments

Comments
 (0)