Недавно вышла новая версия TypeScript. Дениэл Розенвассер рассказал про новые фичи релиза — "Announcing TypeScript 3.8".
С версии 3.8 можно явно указывать, что импортируется/экспортируется тип, а не значение:
import type { SomeThing } from "./some-module.js";. Если импортируется только тип, то на этапе транспиляции import удаляется. Иногда из-за этого возникают ошибки в рантайме, например, в Angular.js (1.x) ломалась регистрация сервисов. С появлением более тонкой декларации импортов и новой опции
importsNotUsedAsValues теперь можно предотвратить подобные ошибки.
Была добавлена поддержка Private Fields из предложения Class field declarations, с помощью которой можно создавать приватные поля класса
#foo = 'bar'. В TypeScript была возможность создания приватных полей с помощью модификатора
private, но Private Fields дают настоящую приватность (hard privacy) на уровне цели транспиляции. Также благодаря им решается проблема с перекрытием полей.
Добавили поддержку пропозала top-level await. Эта фича избавляет от необходимости заворачивать в async-функцию код с
await. Она работает только для модулей, поэтому, если ваш файл ничего экспортиует/импортирует, для того чтобы заработал top-level await надо будет добавить формальный экспорт
export {}.
Реализовали поддержку ещё одного пропозала будущего стандарта
export * as ns. Добавили поддержку модификаторов
@public,
@private,
@protected в JSDoc. Очень много изменений было сделано для улучшения вотчинга файлов — теперь в tsconfig.json есть новая группа опций
watchOptions. Реализовали "неточную и быструю" инкрементальную сборку, которая позволяет ускорить скорость пересборки проекта за счёт снижения строгости проверок. В редакторах появятся новые пункты меню для конвертации конкатенации строк в шаблонные строки и для визуализации иерархии вызовов функций.
#typescript #release #announcement
https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/