Microsoft выпустила обновление TypeScript под номером 3.2. Этот язык программирования расширяет возможности JavaScript по части статической проверки типов данных. Обновление также включает в себя новейшие функции JavaScript из стандарта ECMAScript.
Строгая проверка методов
В TypeScript 3.2 вводится более строгая проверка для bind, call и apply. Эти методы позволяют, в частности, вызывать функции с другим значением, а также функции с массивом их аргументов. Для запуска более строгой проверки используется флаг strictBindCallApply.
Это позволяет повысить безопасность методов, поскольку они работают с большим числом аргументов, что потенциально может привести к уязвимости, если подменить один или несколько аргументов в массиве.
Расширение объектов на обобщённые типы
В JavaScript поддерживается удобный способ копирования свойств существующего объекта в новый. Наибольшее распространение такая схема получила в пересечённых типах Foo и Bar, так называемых метапеременных, а также — в функции Object.assign.
В TypeScript ранее этот способ не работал для всех обобщённых типов (так называемых дженериков). Версия 3.2 получила поддержку этой возможности.
Оператор Rest для обобщённых типов
Если в предыдущем случае речь шла о копировании всех свойств того или иного объекта, то оператор Rest для обобщённых типов позволяет создавать новый объект, который не наследует некоторых свойств оригинального.
let { x, y, z, …rest } = obj;
Наследование конфигурации через node_modules
Долгое время TypeScript поддерживал расширенные файлы tsconfig.json с использованием поля extends. Эта функция полезна, чтобы избежать дублирования конфигурации, однако это хорошо работает только в случае, если несколько проектов находятся в одном репозитории и ссылаются на общий файл tsconfig.
Но в некоторых случаях проекты пишутся и публикуются как полностью независимые пакеты. Эти проекты не имеют общего файла, на который они могут ссылаться, поэтому в качестве обходного пути пользователи могут создать отдельный пакет и ссылку на него.
TypeScript 3.2 теперь разрешает загружать tsconfig.json из папки node_modules. При использовании пустого пути для поля extends в tsconfig.json TypeScript загрузит данные из node_modules. Подобное будет нужно в крупных проектах с большим количеством распределённых зависимостей.
Также теперь компилятор TypeScript, поддерживает новый флаг с именем –showConfig. Этот флаг позволяет выводить на экран содержимое tsconfig.json, чтобы найти ошибку или внести коррективы.
BigInts
Новый простой тип bigint (все буквы строчные) позволяет использовать сколь угодно большие числа в TypeScript. Это нововведение из ECMAScript и работает только в рамках ES.Next. Этот термин является динамическим и автоматически ссылается на новую версию ECMAScript, в которой при каждом обновлении добавляются функции.
Использование типов number и bigint в одной и той же арифметической операции недопустимо. Необходимо явно преобразовывать значения в bigint. Для этого можно воспользоваться функцией BigInt() или вписать литерал n в конец числа:
let foo: bigint = BigInt(100); // функция BigInt
let bar: bigint = 100n; // литерал BigInt
Также отметим, что bigint поддерживается только в Node 11 и последних версиях браузера Chrome.
Объявление Object.defineProperty в JavaScript
При записи в файлы JavaScript с помощью allowJs TypeScript 3.2 теперь распознаёт объявления, использующие Object.defineProperty. Это позволяет проводить более тщательную и строгую проверку типов при включении соответствующей возможности в файлах JavaScript путём активации allowJs или добавления комментария // @ts-check в начало файла.
Поддерживаемые редакторы
На текущий момент поддержка TypeScript 3.2 есть в следующих редакторах:
- Visual Studio 2017 (для версии 15.2 или более поздней).Visual Studio 2015 (требуется обновление 3).Visual Studio Code (нужно обновить версию до полной).Sublime Text 3 через PackageControl.
В других редакторах обновление до TypeScript 3.2 ожидается в ближайшее время. Также Microsoft обещает исправление ошибок и оптимизацию для удобства работы.
TypeScript представляет собой язык программирования, созданный Microsoft в 2012 году. Он позиционируется как система разработки веб-приложений, которая расширяет и дополняет возможности JavaScript. Предыдущая версия 3.1 вышла 27 сентября 2018 года и получила улучшенный рефакторинг, сопоставленные кортежи и typesVersions, а начало ветки 3.0 вышло в сентябре. Главным нововведением этой версии стала возможность масштабирования и структурирования пользовательских проектов.
Источник: