Вчера вышла новая версия TypeScript. Дениэл Розенвассер рассказал про все новинки релиза — "Announcing TypeScript 4.0".
Были добавлены вариативные типы кортежей (Variadic Tuple Types). Благодаря им возможно типизировать операции высокого порядка над кортежами и массивами, когда неизвестны типы значений.
Появилась поддержка меток для элементов кортежей (Labeled Tuple Elements):
type Range = [start: number, end: number];. Использование меток упрощает поддержку кода, так как они делают намерение разработчика более очевидным.
В новой версии TypeScript появилась поддержка вывода типов для членов классов на основе анализа кода конструктора, когда включён
noImplicitAny.
Добавлена поддержка составных операторов присваивания для логических операций:
a ||= b,
a &&= b и
a ??= b (Short-Circuiting Assignment Operators). Благодаря этим операторам можно компактно комбинировать присваивание с коротким циклом вычислений логических операций.
В
try/catch блоке теперь можно указать тип
unknown для
catch. Это делает код безопаснее, потому что разработчик в таком случае должен явно сделать необходимые проверки перед использованием catch-значения.
Теперь возможно указать свою JSX-фабрику для Fragment с помощью опции
jsxFragmentFactory. Также можно использовать прагму
/** @jsxFrag */ для указания фабрики в пределах одного файла.
Есть ломающие изменения. Операнды для
delete должны быть опциональными. Переопределние акцессоров свойствами и наоборот теперь будет приводить к ошибке. Был изменён
lib.d.ts. Наиболее заметное изменение — удаление
document.origin.
Много изменений и улучшений в экосистеме TypeScript. Улучшена работа автоимпортов для только что установленных пакетов. Ускорена работа инкрементальной сборки. Редакторы могут использовать JSDoc
/** @deprecated */ для отметки устаревших API при автодополнении кода. Сайт проекта был полностью переписан.
#typescript #release
https://devblogs.microsoft.com/typescript/announcing-typescript-4-0