Спецификация TypeScript заявляет в §4.15.6 о &&:
& & оператор допускает, чтобы операнды были любого типа и выдавали результат того же типа, что и второй операнд.
В Javascript оператор && возвращает первый операнд, если он является ложным, иначе он возвращает второй операнд (см. ECMA-262 §11.11).
Это означает, что если левый операнд ложный, && вернет значение, соответствующее типу левого операнда. Например,
typeof ( false && {} ) === "boolean" // true
typeof ( '' && 1 ) === "string" // true
typeof ( null && "hello" ) === "object" // true
typeof ( NaN && true ) === "number" // true
Typescript, согласно приведенному выше правилу, неправильно предсказывал бы типы вышеуказанных выражений Object, Number, String и Boolean соответственно.
Я что-то упустил? Есть ли веская причина, чтобы тип выражения && соответствовал типу второго операнда? Должен ли тип результата вести себя как оператор || и возвращать наилучший общий тип двух операндов и Any, если нет лучшего общего типа?