Типы пересечения типов функций ведут себя не так, как я ожидал. Возьмите этот образец:
var c: ((x: number) => void) = x => { };
Это компилируется просто отлично. x
— это число в лямбде.
Но это не удается:
var c: ((x: number) => void) & ((x: number | string) => void) = x => { };
В нем говорится, что «x неявно имеет тип «любой»». (Компиляция с --noExplicitAny.)
Даже это терпит неудачу с тем же замечанием:
var c: ((x: number) => void) & ((x: number) => void) = x => { };
Это означает, что не для всех типов T
, T & T
совпадает с T
, что действительно странно.