Доступен TypeScript 6.0, последний выпуск с компилятором на JavaScript

Компания Microsoft опубликовала релиз TypeScript 6.0, языка для разработки web-приложений, расширяющего возможности JavaScript, и связанного с ним инструментария. Код компилятора, транслирующего код TypeScript в представление JavaScript, распространяется под лицензией Apache 2.0, разработка ведётся в публичном репозитории через сервис GitHub. Спецификации языка открыты и опубликованы в рамках соглашения Open Web Foundation Specification Agreement.

Язык TypeScript расширяет возможности JavaScript, оставаясь полностью обратно совместимым, что упрощает перевод существующих приложений на TypeScript. Итоговое приложение на TypeScript компилируется в обычный JavaScript, который можно выполнить в любом современном web-браузере или использовать c платформами Node.js, Bun и Deno. В программах на TypeScript можно использовать существующие JavaScript-библиотеки. От JavaScript язык TypeScript отличается средствами для явного определения типов, а также поддержкой использования полноценных классов. Статическая типизация позволяет избежать многих ошибок в процессе разработки, даёт возможность задействовать дополнительные техники оптимизации, упрощает отладку, делает код более читаемым и простым для доработки и сопровождения.

Ветка TypeScript 6.0 отмечена как последняя, поставляемая с компилятором на языке TypeScript, транслируемом в JavaScript. В ветке TypeScript 7.0 проект перейдёт на новый компилятор typescript-go (tsgo), разрабатываемый с 2024 года на языке Go. Новый компилятор существенно увеличит скорость сборки, уменьшит потребление памяти и сократит время запуска редакторов кода, что решит наблюдаемые ныне проблемы с масштабированием при использовании в очень больших проектах. Также будет предоставлен компактный инструментарии командной строки, позволяющий быстро собирать код для проверки его работоспособности.

Ветка TypeScript 6.x продолжает поставляться со старым компилятором, но включает отдельные изменения для подготовки к миграции на новую реализацию. Впуск TypeScript 6.0 позиционируется как
связующее звено между ветками TypeScript 5.9 и 7.0, и содержит изменения, главным образом нацеленные на упрощение будущего перехода на ветку TypeScript 7.0. Для тестирования доступен предварительный выпуск TypeScript 7.0, опубликованный в форме дополнения к VSCode и NPM-пакета. После релиза TypeScript 7.0 ветки 6.x и 7.x будут сосуществовать и сопровождаться параллельно до тех пор, пока ветка TypeScript 7.x не достигнет зрелого состояния, готового полностью заменить старый инструментарий.

Среди изменений в TypeScript 6.0:

  • Реализована возможность использования префиксов «#/» в стиле Node.js для импорта псевдонимов модулей, определённых внутри пакета, вместо указания относительных путей. Например, ‘import * as utils from «#root/utils.js»‘ вместо ‘import * as utils from «../../utils.js’.
  • Добавлен флаг «—stableTypeOrdering» для включения применяемого в ветке TypeScript 7 алгоритма детерминированной сортировки типов внутри компилятора, гарантирующего одинаковый порядок определения типов в любых окружениях. Режим рекомендуется использовать только для диагностики возможных проблем перед переходом на ветку TypeScript 7, так как его включение в TypeScript 6.0 может замедлить компилятор на 25%.
  • Реализованы встроенные типы для API Temporal, предлагающего альтернативные методы для работы с датами и временем, позволяющие манипулировать датами с учётом и без учёта часовых поясов, конвертировать время, форматировать вывод и выполнять арифметические операции со временем.
  • Добавлены типы для upsert-методов getOrInsert и getOrInsertComputed в объектах Map и WeakMap, возвращающих уже имеющееся в коллекции значение, ассоциированное с указанными ключом, или создающих новую запись, если ключа не нашлось.
  • Добавлена поддержка функции RegExp.escape, экранирующей спецсимволы в строках для
    из безопасного использования в качестве шаблона внутри регулярных выражений, задаваемых через конструктор RegExp().

  • Изменены настройки по умолчанию:
    • Параметр rootDir теперь указывает на текущий каталог «.», в котором размещён файл конфигурации tsconfig.json, в не на типовой каталог с исходным кодом.
    • Поле «types» в tsconfig.json теперь определяется как «[]» вместо «[«*»]», т.е. TypeScript теперь по умолчанию не включает все пакеты из «node_modules/@types» и требует явного указания глобальных пакетов (например, [«node», «jest»])). Изменение приводит к сокращению времени компиляции на 20-50%.
    • Значение target теперь включает актуальную версию ECMAScript (es2025). В поле tagret объявлена устаревшей версия es5 (ECMAScript 5), в качестве минимальной заявлена версия es6 (ECMAScript 2015).
    • По умолчанию активирован режим strict для строгой проверки типов.
    • Параметр module по умолчанию выставлен в значение «esnext», включающем поддержу JavaScript-модулей (ESM) с директивами import и export, вместо устаревшего формата CommonJS.
  • Для повышения производительности компилятора объявлены устаревшими:
    • Опция «—baseUrl».
    • Использование ключевого слова module для определения пространств имён модулей («module Foo { … }» вместо «namespace Foo { … }»).
    • Опция «—outFile » (следует использовать внешние упаковщики, такие как esbuild, Rollup, и Webpack);
    • Режим «—moduleResolution: classic» (рекомендуется использовать nodenext или bundler).

Источник: http://www.opennet.ru/opennews/art.shtml?num=65059