Условные типы Typescript, похоже, допускают null

#typescript #conditional-types

#typescript #условные типы

Вопрос:

Учитывая этот пример условного типа:

 type MyType = 'Number' | 'String';

interface Test<T extends MyType> {
  bar: T extends 'Number' ? 25 : '25'
}
  

Если я попытаюсь:

 const test: Test<'Number'> = {bar: null}
  

Я не получаю жалоб, похоже, это допустимый Typescript. Однако при наведении курсора bar я получаю всплывающее сообщение (property) Test<"Number">.bar: 25
, которое, по-видимому, означает, что TS правильно понял тип.

Тогда почему я не получаю присвоение ошибки таким образом? Как я могу это исправить?

Комментарии:

1. @RobbyCornelissen это не имеет значения, это иллюстрация… Здесь предполагалось показать примерный тип объединения. Может быть, перечисление или любой другой тип объединения ничего не изменит, речь не о number | string

Ответ №1:

Просто включите опцию компилятора --strict или --strictNullChecks .