Почему я могу использовать утверждения типа с такими литералами, как `false`? - PullRequest
3 голосов
/ 10 июля 2020

В TypeScript я могу успешно скомпилировать следующий код:

const x = true as false;

Итак, у меня есть константа x со значением true и типом false. Я ожидал, что такие прямые утверждения недействительны, но, на удивление, они верны. Например, для аналогичного кода

const x = 0 as false;

есть ошибка компиляции

Преобразование типа 'number' в тип 'false' может быть ошибкой. ошибка, потому что ни один тип в достаточной степени не перекрывается с другим. Если это было намеренно, сначала преобразуйте выражение в «unknown».

Я ожидал, что аналогичная ошибка возникнет с true и false.

Почему ошибки нет и есть ли способ (например, некоторый набор параметров компилятора) исправить это?

1 Ответ

4 голосов
/ 11 июля 2020

Это потому, что машинописный текст расширяет сами типы. true и false перекрываются, они оба являются логическими типами. 0 и false не пересекаются, одно - число, другое - логическое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...