Релиз TypeScript 3.9
Сегодня вышла новая версия TypeScript 3.9. Дениэл Розенвассер рассказал про новинки релиза в статье "Announcing TypeScript 3.9".
В TypeScript 3.9 были исправлены проблемы с медленной компиляцией, которые были обнаружены в material-ui
, styled-components
и других библиотеках. Было слито шесть пулл-реквестов каждый из которых ускоряет компиляцию на 5-10%. Один из внутренних проектов Microsoft после перехода на версию 3.9 сократил время компиляции с 29 секунд до 10 секунд.
Была исправлена ошибка выведения типов при использовании Promise.all
и Promise.race
. Эта проблема проявляла себя при оборачивании в промис значения, которое могло быть null
или undefined
.
Добавлена поддержка служебного комментария // @ts-expect-error
, который можно использовать в юнит-тестах для тестирования кейсов корректной обработки ошибок в JavaScript-коде.
Расширена проверка функций в условных выражениях. Теперь компилятор будет сообщать об ошибке, если в тернарном операторе находится функция, которая не вызвыается.
Релиз нового оператора awaited
для рекурсивного разворачивания промисоподных типов был отложен из-за обнаруженных проблем.
Была улучшена интеграция с редакторами. В JavaScript-файлах теперь работает автоимпорт модулей в CommonJS-стиле: const fs = require("fs");
. Средства для рефакторинга сохраняют все переносы строк как в оригинальном коде. Был добавлен quick-fix для вставки забытого return
. Была исправлена проблема с Language Server, который не подхватывал tsconfig.json
, который полностью состоял из ссылок на другие конфиги (Solution-style).
Есть ломающие изменения. Optional Chaining с Non-Null Assertions теперь парсится немного по-другому. Символы "}" и ">" больше нельзя использовать в строках внутри JSX. Была улучшена проверка типов для пересечений объектов с опциональными свойствами и общими несовместимыми свойствами и т.п.
https://devblogs.microsoft.com/typescript/announcing-typescript-3-9/