Microsoft выпустила обновление TypeScript 2.5
Microsoft анонсировала выход новой версии TypeScript — надстройки над JavaScript, которая привносит статические типы и надежные инструменты. Ниже представлен список основных изменений по сравнению с версией 2.4.
Рефакторинг Extract Method и Extract Function
Помогает сделать объёмную перезапись кода тривиальной:
Новые быстрые исправления
TypeScript не поддерживает JSDoc-типы, но теперь он может их понимать и предлагать исправленный вариант:
Также подобные исправления полезны в случаях, когда пользователи пытаются неправильно ссылаться на тип свойства другого объекта. Например, используя данный
|
interface Foo {
bar: number;
|
интерфейс, пользователь захотел объявить переменную xyz, чей тип связан с типом bar. Он может написать неправильную конструкцию:
|
// Присвоить xyz тип поля bar интерфейса Foo
var xyz: Foo.bar
|
TypeScript же автоматически предложит правильную версию:
Поддержка приведения JSDoc-типов в файлах JavaScript
Возможность приведения типов (type assertion) отсутствовала в предыдущих версиях. Она необходима, когда пользователь знает больше о типе данных, чем компилятор, и сообщает ему об этом. Рассмотрим пример:
|
// @ts-check
var foo = Math.random() ? «hello» : 100;
foo.toUpperCase();
// Ошибка! Свойства ‘toUpperCase’ не существует для типов ‘number’.
|
TypeScript корректно определил, что пользователь вызывает несуществующий метод типа number. Для обработки подобной ситуации, а точнее, для аварийной остановки во время выполнения, пользователь может воспользоваться приведением типов:
|
var bar = /** @type {string} */ (foo);
bar.toUpperCase();
|
Синтаксис обработчика:
Добавить в заметки чтобы посмотреть позже?|
/** @type {тип_обрабатываемых_данных} */ (какое_либо_выражение)
|
Если пользователь разрешил JavaScript проверку файла, неверное приведение типов будет обнаружено:
|
var clearlyNumber = /** @type {string} */ (100);
// Ошибка! Тип ‘number’ не может быть конвертирован в тип ‘string’.
|
Необязательные условия в catch
|
let contents;
contents = fs.readFileSync(«.config_file»).toString(‘utf8’);
catch (unusedError) {
// При отсутствии файла использовать параметры по умолчанию
contents = createDefaultContents();
|
Обратите внимание, что на unusedError в данном примере нет ни одной ссылки. Пользователь теперь может просто игнорировать описание ошибок в блоке catch, делая код более читабельным:
|
let contents;
contents = fs.readFileSync(«.config_file»).toString(‘utf8’);
// При отсутствии файла использовать параметры по умолчанию
contents = createDefaultContents();
|
Задублированные и перенаправленные пакеты
Компилятор теперь сможет проверять, загружены ли файлы из «идентичных» пакетов. Если один из файлов загружен из пакета c package.json, содержащего такие же имена и версию полей, что и ранее встреченный пакет, то TypeScript переходит к обработке самого верхнего в иерархии из них. Это поможет решить проблему, когда оба пакета содержат идентичные описания классов, но один из которых содержит private объекты, что в свою очередь влияет на неопределённость использования.
В качестве приятного бонуса данная функция сокращает потребление памяти и времени работы компилятора за счёт прекращения загрузки .d.ts файлов из дубликатов.
Флаг компилятора --preserveSymlinks
Данный флаг переносит в TypeScript функциональность флага --preserve-symlinks из Node.js, а именно позволяет устанавливать зависимости на основе расположения символических ссылок, а не иерархии дерева. Этот флаг также имеет противоположный эффект флагу --resolve.symlinks инструмента Webpack (при установке --preserveSymlinks в true, --resolve.symlinks автоматически переводится в false, и наоборот).
Установка
Для начала использования новой версии её достаточно загрузить через менеджер пакетов NuGet или воспользоваться командой npm:
|
npm install —g typescript
|
TypeScript 2.5 может быть установлен напрямую в среды разработок Visual Studio 2015 Update 3 и Visual Studio 2017 версии 15.2 и выше. Любители редакторов кода Visual Studio Code и Sublime Text уже сейчас могут настроить их для использования новой версии. Для запуска в других редакторах предлагается посетить страничку разработчиков.
Наслаждайтесь!
Как и всегда, полный список изменений доступен на wiki-страничке языка. Дорожную карту и будущее языка интересующиеся могут найти на GitHub.
Источник: блог MSDN

