TypeScript 5.2 находится в пути, и мы уже можем получить представление о его будущих функциях в бета-версии, выпущенной 21 июля.
Одним из замечательных дополнений является ключевое слово using
, которое позволяет автоматически очищать объекты, как только они выходят из текущей области использования. В основе этого механизма лежит новый глобальный символ Javascript Symbol.dispose
.
Ресурс — объект с определенным временем жизни, в конце которого должна быть выполнена либо операция, зависящая от времени жизни, либо ссылка без сбора мусора (например, файл ручка, гнездо и т. д.) должны быть закрыты или освобождены. — github.com/tc39/proposal-explicit-resource-management#definitions
Когда объекту назначается функция, связанная с Symbol.dispose
, он помечается как ресурс, что означает, что он имеет определенное время жизни. Затем вступает в действие ключевое слово using
, чтобы облегчить эффективный контроль над этими «ресурсами», обеспечивая беспрепятственную очистку по мере того, как они перестают использоваться.
Если у вас есть ресурсы, которые необходимо очищать асинхронно, TypeScript представляет Symbol.asyncDispose
, который гармонично работает с синтаксисом await using
.
Вот простой пример:
Функция getResource
возвращает функцию Symbol.dispose
, которая делает ее ресурсом с определенным временем жизни. Мы используем ключевое слово using
для получения ресурса путем привязки его к нашей переменной resource
. Как только resource
покидает текущую область, запускается определенная функция dispose, которая обрабатывает работу по очистке. В нашем случае в консоль пишется «Clean up done».
В TypeScript 5.2 добавлена поддержка новой функции явного управления ресурсами в ECMAScript. — devblogs.microsoft.com
Наличие этой новой функции будет чрезвычайно полезно для более эффективной «очистки» после создания объектов.