На этой неделе вышла новая версия 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