> For the complete documentation index, see [llms.txt](https://koziuk-s.gitbook.io/angular-starter/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://koziuk-s.gitbook.io/angular-starter/base-typescript/functions.md).

# Functions

TypeScript має додаткові можливості по роботі з функціями. Зокрема, тепер ми можемо визначити тип переданих аргументи і тип значення, що повертає функція.

{% code title="main.ts" %}

```typescript
function add(a: number, b: number): number {
  return a + b;
}

let sum = add(1, 2);

console.log(sum);
```

{% endcode %}

Якщо функція нічого не повертає, то вказується тип **void.**

{% code title="main.ts" %}

```typescript
function sum(a: number, b: number): void {
  console.log(a + b);
}

sum(10, 20);
```

{% endcode %}

#### Не обов'язкові аргументи.

В TypeScript, при виклику функції, в ню має передаватися рівно стільки значень, скільки в ній визначено аргументи.

{% code title="main.ts" overflow="wrap" lineNumbers="true" %}

```typescript
function getName(firstName: string, lastName: string): string {
  return firstName + ' ' + lastName;
}
  
let name1 = getName('Tom', 'Bob');
let name2 = getName('Tom', 'Bob', 'Alice'); // ERROR: Expected 2 arguments, but got 3.

let name3 = getName('Tom'); // ERROR: Expected 2 arguments, but got 1.
```

{% endcode %}

Деякі аргументи можна оголосити як необов'язкові.

Необов'язкові аргументи повинні бути позначені знаком запитання `?`. Причому необов'язкові аргументи повинні йти після обов'язкових.

{% code title="main.ts" overflow="wrap" lineNumbers="true" %}

```typescript
function getFullName(firstName: string, lastName?: string) {
  if (lastName) {
    return firstName + ' ' + lastName;
  } else {
    return firstName;
  }
}

let nameOne = getFullName('Tom', 'Bob');
let nameTwo = getFullName('Tom');
```

{% endcode %}

Також, аргументи функції, що мають значення за замовчуванням, автоматично є не обовязковими.

{% code title="main.ts" overflow="wrap" lineNumbers="true" %}

```typescript
function sum(a: number, b = 20): void {
  console.log(a + b);
}

sum(10);
```

{% endcode %}

Якщо ж необхідно, щоб функція приймала набір однотипних аргументів, то використовується знак три крапки `...`, після якого йде масив.

{% code title="main.ts" overflow="wrap" lineNumbers="true" %}

```typescript
function addNumbers(firstNumber: number, ...numberArray: number[]): number {
  let result = firstNumber;

  for (let i = 0; i < numberArray.length; i++) {
    result +=numberArray[i];
  }

  return result;
}

let num1 = addNumbers(3, 7, 8);
console.log(num1); // 18

let num2 = addNumbers(3, 7, 8, 9, 4);
console.log(num2); // 31
```

{% endcode %}
