Спецификация 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
, если нет лучшего общего типа?