Название фичи: Контекстный тип
Описание:
Контекстная типизация происходит, когда о типе выражения можно сделать догадку на основании его положения.
Аналог в c# / js: тип принимаемого параметра в с#
Решаемая проблема:
Ошибка при обращении к полю передаваемого в функцию объекта.
Пример возникновения:
Функция принимает не типизированный параметр, например объект, при этом внутри функции происходит попытка обращения к конкретному полю данного объекта.
Пример проблемы в JavaScript:
var x;
x = function(s) {
return s.toUpperCase(); // Компиляция прошла успешно
}
console.log(x(10)); // Падает в runtime: toUpperCase is not a function
Пример решения на TypeScript:
var x: (number) => number;
x = function(s) {
return s.toUpperCase(); // Выведет ошибку во время компиляции
}
...
Как решить проблему:
Если выражение, тип которого был выведен из контекста, содержит явное указание типа, то выведенный контекстный тип игнорируется. Явно указанный тип параметра в функциональном выражении будет иметь приоритет над контекстным типом.
Синтаксис:
var x: (number) => number;
Перекомпилированный в JS код:
var x;