Все, что вам нужно знать о предстоящей версии TypeScript

12 августа был анонсирован TypeScript 4.4 Release Candidate (RC). Это означает, что изменения были завершены, и вскоре после нескольких дополнительных исправлений ошибок выйдет официальный стабильный выпуск.

Давайте разберемся, что нового, как это может повлиять на ваш опыт разработки и как это попробовать прямо сейчас!

Критические изменения

Начнем с резюмирования критических изменений. В этом выпуске есть несколько из них, которые не являются основными, но могут нарушить ваш код:

  • Вы больше не можете инициализировать abstract свойства внутри abstract классов. Вы можете только определить их тип.
  • Promise улучшены проверки. TS теперь будет напоминать вам включить await, когда вы if проверяете Promise результаты в большем количестве случаев, чем раньше, чтобы предотвратить непреднамеренную проверку истинности.
  • Параметры catch теперь по умолчанию равны unknown вместо any, если установлен флаг \--strict или новый \--useUnknownInCatchVariables.
  • Значение this игнорируется при вызове импортированных функций для согласования со спецификацией модулей ECMAScript во всех доступных модульных системах (ESM, AMD, CommonJS и т. Д.)
  • lib.d.ts был изменен, чтобы соответствовать текущим спецификациям (особенно lib.dom.d.ts со всеми изменениями, отмеченными здесь)

Разобравшись с этим, давайте посмотрим, каких значительных новых функций вы можете ожидать!

Улучшенное обнаружение защиты типа

Вероятно, наиболее важной особенностью TypeScript 4.4 является «анализ потока управления для условий и дискриминантов с псевдонимами».

Это означает, что отныне средства защиты типов с псевдонимами, даже с размеченными объединениями, будут должным образом анализироваться и использоваться для сужения данного типа.

В предыдущих версиях TS следующее не работало.

Условие isString не могло сообщить TS, что, когда оно истинно, arg является string. В результате TS выдавала ошибку, когда вы использовали методы и свойства, зависящие от типа, все еще думая, что тип arg - string | number. Правильно интерпретировалось только помещение условия непосредственно в оператор if.

Благодаря улучшенному анализу потока управления это больше не будет проблемой в TS 4.4. Кроме того, TS также обнаруживает правильные типы при работе с размеченными объединениями, даже при выполнении проверок разрушенных свойств!

До определенной глубины TS также распознает более сложные комбинированные условия и соответственно сузит тип.

Эти улучшения действительно хороши! Разработчики TS теперь смогут красиво оформлять и аннотировать сложные условия, не помещая все в свои if операторы или используя утверждения прямого типа.

Более универсальные подписи индекса

Еще одно большое улучшение связано с индексными подписями. Вы больше не будете ограничены только number и string. Теперь также будут разрешены шаблоны symbol и строки шаблона.

symbol индексные подписи - хорошее дополнение. Однако, на мой взгляд, сигнатуры индекса шаблон строки намного интереснее! Это позволит вам сузить подпись индекса до определенного шаблона, позволяя определять сложные типы, как никогда раньше!

Если вы когда-нибудь хотели использовать подпись индекса, но сузить ее с общего string, это обновление будет для вас огромным!

Вдобавок ко всему этому также будут разрешены подписи индекса объединения. Допускается любая комбинация string, number, symbol и строкового шаблона шаблона.

Воспроизведение сеанса с открытым исходным кодом

Отладка веб-приложения в производственной среде может быть сложной задачей и потребовать много времени. OpenReplay - это альтернатива с открытым исходным кодом для FullStory, LogRocket и Hotjar. Он позволяет вам отслеживать и воспроизводить все, что делают ваши пользователи, и показывает, как ваше приложение ведет себя при каждой проблеме. Это похоже на то, как если бы инспектор браузера был открыт, а пользователь смотрит через плечо. OpenReplay - единственная доступная альтернатива с открытым исходным кодом.

Удачной отладки для современных команд, занимающихся фронтендом - Начни мониторинг своего веб-приложения бесплатно.

Точные необязательные типы свойств

Помимо \--useUnknownInCatchVariables введен еще один флаг - \--exactOptionalPropertyTypes.

Если этот флаг включен, TS больше не позволит инициализировать дополнительные свойства с помощью undefined.

Такое поведение, определяющее, действительно ли свойство присутствует в объекте (со значением undefined или иначе), полезно в нескольких случаях.

При использовании, например, Object.assign или разброса объектов ({ …obj }), свойства с undefined фактически обрабатываются иначе, чем действительно несуществующие свойства. В зависимости от реализации то же самое может быть верно и для вашего кода.

Чтобы разрешить undefined при включенном \--exactOptionalPropertyTypes, вам нужно явно включить undefined в тип объединения. Без флага такое поведение происходит автоматически.

Поскольку этот флаг может вызывать проблемы как в вашем коде, так и в определениях сторонних разработчиков (например, из Определенного Типа), он не включен в \--strict и, следовательно, не является нарушающим.

Если вы чувствуете, что это может помочь в вашей кодовой базе, включите этот флаг вместе с \--strictNullChecks для подтверждения.

Статические блоки в классах

Последняя большая новая функция - это static блоков.

Это новая функция ECMAScript, которая в настоящее время находится на стадии 3 предложения. static блоки допускают более сложный процесс инициации static членов класса.

Хотя вышеупомянутое уже было возможно, эта функция делает процесс более простым и элегантным, позволяя блоку инициации находиться прямо внутри определения класса.

Раньше такую ​​логику приходилось выносить за рамки определения класса, что делало ее отдельной и громоздкой.

Помимо этого, блоки static также имеют то преимущество, что разрешают доступ к закрытым статическим полям и полям экземпляра (учитывая, что они являются частью определения класса), предоставляя возможность делиться своими значениями с другими классами или функциями, доступными в такой же объем.

Улучшения производительности

Помимо новых функций и критических изменений, как всегда, есть несколько заметных улучшений производительности:

  • Более быстрая передача деклараций благодаря дополнительному кэшированию.
  • Условная нормализация пути сокращает время, необходимое компилятору для нормализации путей, с которыми он работает, и, таким образом, загружается быстрее.
  • Более быстрое сопоставление путей для paths в tsconfig.json, благодаря дополнительному кэшированию, приводит к значительному повышению производительности.
  • Ускорение инкрементных сборок с \--strict благодаря исправлению ошибки, приводящей к ненужной проверке типов при каждой последующей сборке.
  • Более быстрое создание исходной карты для больших результатов
  • Сборка выполняется быстрее \--force благодаря сокращению ненужных проверок

Улучшения Intellisense

Область, в которой TS наиболее известна - intellisense (также известная как поддержка автозаполнения / редактора), также претерпела некоторые улучшения.

По мере того, как предложения TS становятся более уверенными, начиная с версии 4.4 он автоматически выдаёт варианты написания для файлов с чистым JavaScript, если checkJs или @ts-check не включены. Это будут неинвазивные предложения типа «Вы имели в виду…?».

Что касается других видимых улучшений, TS теперь может отображать встроенные подсказки, также известные как «призрачный текст». Это может применяться ко всему, от имен параметров до предполагаемых возвращаемых типов.

Также улучшены предлагаемые пути импорта. Вместо непослушных относительных путей, таких как node\_modules/…, TS будет отображать пути, которые вы действительно используете - например, react вместо node\_modules/react/.. или что-то в этом роде. Косметическое, но приветствуемое изменение.

Тест-драйв

Обладая всеми этими замечательными функциями, вы, вероятно, задаетесь вопросом, когда вы сможете их использовать.

Лучше всего дождаться стабильного релиза в следующие несколько недель. Таким образом, вам не придется сталкиваться с нерешенными ошибками и другими проблемами.

Однако, если вы хотите протестировать версию RC прямо сейчас, вы можете получить ее в NPM:

Затем, при необходимости, выберите его для использования в выбранном вами редакторе IDE / кода.

Естественно, VS Code обеспечит вам лучший опыт, а с VS Code Insiders вы получите последнюю версию TS прямо из коробки.

Нижняя линия

Вот и все! В TS 4.4 появятся тонны улучшений, а еще больше запланировано.

Если вы пользователь TS, это будет для вас хорошим обновлением. Это наверняка улучшит ваш опыт разработки даже дальше, чем уже делает TS. А если вы еще не используете TS, может быть, вам сейчас самое время попробовать?