TypeScript 1.5: Контекстная типизация (Contextual Typing)
Как правило, определение типа TypeScript делается “снизу вверх”: от дочерних элементов дерева выражений к его корню. В следующем примере TypeScript определяет, что возвращаемый тип функции ‘mul’ должен быть ‘number’, путем получения информации о типе снизу вверх в возвращаемом выражении. Т.е. сначала будет определен тип выражения a * b, и затем это значение будет передано вверх к корню дерева выражений, коим является возвращаемое функцией значение (result).
var result = function mul(a: number, b: number) {
return a * b;
}
Для переменных и параметров без проставленного типа или для значений по умолчанию, TypeScript подставляет тип ‘any’ гарантируя, что компилятору не нужна больше никакая информация о местах вызова функции для определения типа возвращаемого значения.
Однако, в некоторых случаях, вывод типа выражения осуществляется ‘сверху вниз’, из контекста выражения. Это называется контекстной типизацией. Говоря более простым языком, TypeScript определяет тип выражения из типов его аргументов.
var result = (a: number, b: number) => number;result = function(a, b) {
return a * b;
}
Контекстная типизация предоставляет информацию о выражении, функции или объекте, что позволяет программистам использовать его правильно.