TypeScript: Могу ли я проверить, содержит ли тип неопределенный, даже если strictNullChecks имеет значение false? - PullRequest
0 голосов
/ 09 октября 2019

У нас была проблема в redux-starter-kit, когда у пользователя библиотеки были отключены strictNullChecks, и один из наших тестов типов был коротким, возвращая типы для другого случая.

Этот тест должен возвращатьсяTrue-Parameter или False-Parameter в зависимости от того, содержит ли параметр P неопределенное значение или нет.

Это текущий код:

type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;

Так что я ожидаю, что оба из них вернутся"yes":

IfMayBeUndefined<number, "no", "yes">
IfMayBeUndefined<number|undefined, "yes", "no">

Теперь я спрашиваю себя, есть ли другой способ проверить это, даже при строгом проверке NullChecks: false

1 Ответ

1 голос
/ 09 октября 2019

Я не верю, что это возможно.

Название "strictNullChecks" немного вводит в заблуждение, поскольку оно может указывать на то, что он просто инструктирует компилятору TypeScript выполнять дополнительные проверки и выдавать дополнительные предупреждения. Тем не менее, он фактически изменяет базовое поведение средства проверки типов и семантику типов null и undefined. Согласно Руководство по написанию шрифтов ,

В режиме строгой проверки нуля нулевые и неопределенные значения не находятся в домене каждого типа и могут быть назначены только им и любому (одномуИсключением является то, что undefined также можно назначить для void). Итак, тогда как Т и Т |undefined считается синонимичным в обычном режиме проверки типов (поскольку undefined считается подтипом любого T), они являются разными типами в режиме строгой проверки типов, и только T |неопределенный разрешает неопределенные значения. То же самое верно для отношения T к T |ноль.

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