Название фичи: Функции

Описание:
Работа функций и особенности аналогичны 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;

Как решилась проблема:

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

results matching ""

    No results matching ""