В грядущем typescript 5.2 собираются добавить очень интересную и полезную фичу using
. Подобное уже реализовано в других языках: В C# это using
, в Go - defer
. В чем основная идея.
using
позволяет автоматически освобождать ресурс (вызывать специальный метод для этого) после того, как покидает область видимости блока. Например у нас есть метод getResource
у которого реализован метод [Symbol.dispose]()
. Тогда мы можем написать следующий код и метод Symbol.dispose
будет выполнен автоматически в конце выполнения функции main
, как если бы эта конструкций была бы завернута в блок try finally
.
function getResource() {
return {
execute: () => console.log('execute'),
[Symbol.dispose]: () => console.log('dispose'),
};
}
/*
function main() {
const resource = getResource();
try {
resource.execute()
} finally {
resource[Symbol.dispose]();
}
}
*/
function main() {
const resource = using getResource();
resource.execute();
}
main();
Такое поведение может быть полезно в первую очередь в nodejs для работы например с базами данных, но я уверен что подобный синтаксический сахар может быть полезен много где. Для того чтобы посмотреть на более подробное обсуждение и реализацию функциональности можно пока посмотреть в pull-request https://github.com/microsoft/TypeScript/pull/54505 а сам typescript 5.2 обещается зарелизится 22 августа.