На этой неделе вышла новая версия TypeScript 3.7 с большим количеством фич.
Добавили поддержку Optional Chaining. В release notes есть хорошее именование разных типов Optional Chaining, которое я нигде раньше не встречал:
optional property accesse для
foo?.bar,
optional element access для
arr?.[0] и
optional call для
method?.(). Также добавили Nullish Coalescing (
?? ), которое призвано заменить использование
|| для определения дефолтных значений.
Улучшили поддержку уточнения типов после использования функций assert. Для этого была добавлена новая концепция
assertion signatures. При реализации этой фичи улучшили поддержку функций, которые возвращают
never.
Крутая новая фича — продвинутая поддержка рекурсивных типов. Раньше такой алиас
type ValueOrArray<T> = T | Array<ValueOrArray<T>>; вызвал бы ошибку. С версии 3.7 это корректная конструкция. Теперь можно компактно описывать рекурсивные структуры данных. Вот пример для JSON:
type Json =
| string
| number
| boolean
| null
| { [property: string]: Json }
| Json[];
В релизе есть ломающие изменения. Обновили типы для lib.dom.d.ts. Поля классов при транспиляции теперь преобразуются в конструкции Object.defineProperty(). Если функция находится в операторе if и она не вызывается, это будет приводить к ошибке.
Улучшили совместимость между ts и js. Поменяли механизм работы с project references. Форматтер теперь может удалять или, наоборот, при необходимости автоматически добавлять символ точки с запятой.
#typescript #release
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html