Релиз TypeScript v3.7
На этой неделе вышла новая версия 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. Форматтер теперь может удалять или, наоборот, при необходимости автоматически добавлять символ точки с запятой.
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html