Microsoft анонсировала релиз-кандидат TypeScript 4.2. В новой версии улучшена обработка остальных элементов в типах кортежей и поддерживается более разумное сохранение псевдонимов типов.
TypeScript — это надмножество JavaScript, которое добавляет дополнительные статические типы, которые могут быть проверены компилятором TypeScript для выявления распространенных ошибок в ваших программах.
Улучшения в обработке элементов rest в типах кортежей означают, что элементы rest будут правильно обрабатываться независимо от того, где они встречаются в кортеже. В предыдущих выпусках они должны были быть расположены в последней позиции типа кортежа. По-прежнему существуют некоторые ограничения — у вас не может быть еще одного необязательного элемента или второго элемента rest после элемента rest, и у вас может быть только один элемент rest на кортеж.
Следующее изменение примечания улучшает сохранение псевдонима типа. TypeScript использует эвристику для определения того, когда и как отображать псевдонимы типов, но эта эвристика не всегда правильно интерпретирует вещи для сложных применений из-за того, как TypeScript представляет типы внутри себя. При создании типа объединения из одного или нескольких типов объединения он всегда будет нормализовать эти типы в новый плоский тип объединения, но при этом теряется информация. У средства проверки типов не было способа узнать, где эта строка | номер | логическое значение пришло из.
В TypeScript 4.2 внутреннее устройство было улучшено, так что сохраняется больше исходных структур типов, а это означает, что типы обрабатываются лучше.
Другие улучшения включают более строгие проверки оператора in, чтобы убедиться, что вы не можете случайно использовать не объектный тип в правой части оператора in. TypeScript 4.2 гарантирует, что это может быть обнаружено во время разработки.
Еще одно изменение — ослабленные правила между необязательными свойствами и подписями индекса строки. Подписи индекса строки — это способ ввода словарных объектов, к которым вы хотите разрешить доступ с произвольными ключами. Проблема в том, что строк нет. Предыдущие версии TypeScript обрабатывали необязательные свойства объекта как не присваиваемые другим совместимым индексным сигнатурам из-за наличия undefined. Новая версия допускает подобное присваивание, но не позволяет присваивать необязательные свойства с undefined в их типах, а также не позволяет записывать undefined в конкретный ключ.