Потому что это наиболее точный тип для созданного объекта. Если речь о том что слева тип указан явно, то проблем при использовании брать не должно
При этом, если тип не указывать явно, то field будет boolean, как и должен быть.
А вот это уже интересно... К сожалению я не настолько знаток внутренностей компилятора чтобы ответить 😔
Жаль. Уже 2ой вечер пытаюсь разобраться 😞
а вот это интересно. на плейграунде сможете воспроизвести?
https://www.typescriptlang.org/play?#code/MYewdgzgLgBFCm0CMAuGApAygeQHIwF4YBvGAMwEt4AbAEzSgCcBXeGAXwG4YB6HmQEQggYRBAQiAwARE1biAUKEiwE0AExoQAIwBW8YLCKlKNenBZsuvfsLHj1IENXgBDMLPnQ4iKAGY0WPIRJyKjo0JA5uPkFRCTBmAFt1eEZZGXgADwAHEEZFAE8Mtj98fRgAbQBreFy0aEYKMABzAF00AAU6uIooCgA3M05UzOy8gph2ik7uvoDa+oaYAB8YWISkxZhbeycwddjqagGgA
В обоих случаях пишет, что у field тип Primitive. Не понимаю, что именно не так?
Хорошо, я накидал другой пример, который ближе к моей проблеме
Коротко можно ответить так: при выводе типа из примитивного JS-значения TS обычно обобщает тип (true до boolean, 1 до number...), но из этого правила есть несколько исключений, и здесь срабатывает одно из них (оно работает только для boolean, не для string или number). Исправить проблему можно либо добавлением as boolean ко всем значениям true и false, либо хелпером, расширяющим типы true и false до boolean (boolean в TS — алиас для объединения true | false): play. Подробнее про исключения из правила обобщения выводимых типов: play.
Воу, спасибо. Неожидал получить ответ 🙂
Обсуждают сегодня