Функции

Последнее обновление: 15.05.2021

Определение функции

В javascript функции определяются с помощью ключевого слова function, например:

function add(a, b) {
	return a + b;
}
// использование функции
let result1 = add(1, 2); // результат 3
let result2 = add("1", "2"); // результат 12

TypeScript также определяет функцию с помощью ключевого слова function, но при этом добавляет дополнительные возможности по работе с функциями. В частности, теперь мы можем определить тип передаваемых параметров и тип возвращаемого значения.

Параметры функции

Функция может иметь параметры, которые указываются после названия функции в скобках через запятую. Через двоеточие после имени параметра указывается его тип:

// определение функции
function add(a: number, b: number){
    let result = a + b;
    console.log(result);
}
// вызов функции
add(20, 30); // 50
add(10, 15); //25

Однако поскольку параметры имеют тип number, то при вызове функции

add("1", "2");

компилятор TS выдаст ошибку, так как параметры должны иметь тип number, а не тип string.

При этом функция может не только использовать передаваемые параметры, но и глобальные переменные, определенные во вне:

let koef: number = 1.5;

function add(a: number){
    let result = a *koef;
    console.log(result);
}

add(20); // 30
add(10); //15

Результат функции

Функция может возвращать значение определенного типа, который еще называется типом функции. Возвращаемый тип функции ставится после списка параметров через двоеточие:

function add(a: number, b: number): number {
    return a + b;
}
let result = add(1, 2);
console.log(result);

В данном случае функция будет возвращать значение типа number.

Если функция ничего не возвращает, то указывается тип void:

function add(a: number, b: number): void {
    console.log(a + b);
}
add(10, 20);

В принципе мы можем и не указывать тип, тогда он будет выводиться неявно на основе возвращаемого значения:

function add(a: number, b: number) {
    return a + b;
}
let result = add(10, 20);

Необязательные параметры

В typescript при вызове в функцию должно передаваться ровно столько значений, сколько в ней определено параметров:

function getName(firstName: string, lastName: string) {
    return firstName + " " + lastName;
}

let name1 = getName("Иван", "Кузнецов");
let name2 = getName("Иван", "Михайлович", "Кузнецов");  //ошибка, много параметров
let name3 = getName("Иван");  //ошибка, мало параметров

Чтобы иметь возможность передавать различное число значений в функцию, в TS некоторые параметры можно объявить как необязательные. Необязательные параметры должны быть помечены вопросительным знаком ?. Причем необязательные параметры должны идти после обязательных:

function getName(firstName: string, lastName?: string) {
    if (lastName)
        return firstName + " " + lastName;
    else
        return firstName;
}
 
let name1 = getName("Иван", "Кузнецов");
console.log(name1); // Иван Кузнецов
let name2 = getName("Вася");
console.log(name2); // Вася

Во втором случае, когда в функцию передается только имя, второй используемый параметр будет иметь неопределенное значение или "undefined". Поэтому с помощью условной конструкции проверяется наличие значения для этого параметра.

Значения параметров по умолчанию

Параметры позволяют задать начальное значение по умолчанию. И если для такого параметра не передается значение, то он использует значение по умолчанию:

function getName(firstName: string, lastName: string="Иванов") {
    
	return firstName + " " + lastName;
}

let name1 = getName("Иван", "Кузнецов");
console.log(name1); // Иван Кузнецов
let name2 = getName("Вася");
console.log(name2); // Вася Иванов

Причем в качестве значения можно передавать результат другого выражения:

function defaultLastName(): string{
	return "Smith";
}

function getName(firstName: string, lastName: string=defaultLastName()) {
    
	return firstName + " " + lastName;
}

let name1 = getName("Tom");
console.log(name1); // Tom Smith
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850