TypeScript 1.5: Контекстная типизация (Contextual Typing)

Sergey Bakaev
1 min readOct 10, 2016

--

Как правило, определение типа 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;
}

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

--

--