Название фичи: Функции
Описание:
Работа функций и особенности аналогичны JS.
При совместимости типов, необходимо, чтобы тип возвращаемого значения исходной функции был подтипом типа возвращаемого значения целевой функции. В случае, когда у функции есть перегрузки, для каждой из перезрузок исходного типа у целевого типа должна найтись совместимая сигнатура. Это гарантия, что целевая функция может быть вызвана в каждой из тех ситуаций, в которых может быть вызвана исходная функция.
Аналог в c# / js: function
Отличия:
Типизация для параметров и функции
Типизация возвращаемого значения функции, на него указывает стрелка “=>” между параметрами и типом возвращаемого значения. Часть необходимая, в случае если функция не возвращает значения пишем void.
TS считает, что число передаваемых параметров должно совпадать с числом параметров, которые ожидает функция, то есть каждый параметр функции обязателен.
Возможность сделать параметры функции необязательными с помощью «?»
function buildName (lastName?: string) {…}
Необязательные параметры должны идти после обязательных.
Параметры со значением по умолчанию (
lastName = “Hello!”
)
Решаемая проблема:
У разработчика возникает потребность записать полный тип функции, ограничивая вероятность ошибки вызова.
Пример проблемы на JavaScript:
function add(x) {
return x++;
}
var a = add(1); // работает
a = add("hello"); // Nan
Решение на TypeScript:
function add (x: number): number {
return x++;
}
var a = add(1); // работает
a = add("hello"); // Ошибка во время компиляции: Argument of type '"hello"' is not assignable to parameter of type 'number'.
Синтаксис:
function add (x: number): number {...}
//совместимость типов
let x = (a: number) => 0;
let y = (b: number, s: string) => 0;
y = x; // работает
x = y; // Ошибка: Type '(b: number, s: string) => number' is not assignable to type '(a: number) => number'.
Перекомпилированный в JS код:
function add (x) {...}
var x = function (a) { return 0; };
var y = function (b, s) { return 0; };
y = x;
x = y;
Как решилась проблема:
У разработчика добавилась возможность записать полный тип функции: тип аргументов и тип возвращаемого значения.