Skip to content

Commit 4ecfcda

Browse files
bondianov1valasvegan
authored andcommitted
fix function overload description
1 parent 057a48d commit 4ecfcda

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

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

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
---
2-
32
name: Перегрузка функций (Function Overloads)
43
theory: |
54
@@ -9,10 +8,12 @@ theory: |
98
function concat(a: number, b: number): string;
109
function concat(a: string, b: string): string;
1110
12-
function concat(a: any, b: any): string {
13-
return typeof a === 'string'
14-
? `${a}${b}`
15-
: `${a.toFixed()}${b.toFixed()}`
11+
function concat(a: unknown, b: unknown): string {
12+
if (typeof a === 'number') {
13+
return `${a.toFixed()}${b.toFixed()}`;
14+
}
15+
16+
return `${a}${b}`;
1617
}
1718
1819
concat('one', 'two'); // onetwo
@@ -22,10 +23,10 @@ theory: |
2223
2324
Здесь определяется одна функция `concat()`, у которой две версии, одна принимает на вход два числа, другая две строки. Обе версии выполняют конкатенацию, но делают это по-разному. Строки конкатенируются сразу, а вот у чисел сначала отбрасывается дробная часть.
2425
25-
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `any`, что дает возможность вызывать функцию как со строками, так и с числами.
26+
Реализация поведения для обеих версий делается в третьей функции с тем же именем, но с таким описанием параметров, которое подойдет под каждую версию функции. В примере выше типы параметров определены как `unknown`, что дает возможность вызывать функцию как со строками, так и с числами.
2627
2728
Вся логика, для всех версий функций описывается в этом последнем определении. То по какой ветке идти, делается с помощью проверки типов. В примере выше достаточно проверить тип только первого параметра, так как второй в таком случае точно будет строкой. Это обеспечивает система типов и компилятор.
28-
29+
2930
Для перезагрузки не обязательно использовать объявление функций, все то же самое можно сделать при помощи стрелочной функции:
3031
3132
```
@@ -55,7 +56,7 @@ theory: |
5556
function add(a: string, b: string): string;
5657
5758
// Сигнатура подходит под все примеры выше
58-
function add(a: any, b: any, c?: number): unknown {
59+
function add(a: unknown, b: unknown, c?: number): unknown {
5960
// тут вся логика
6061
if (c === undefined) {
6162
// ...

0 commit comments

Comments
 (0)