using
ユースケース
ネットワーク接続を閉じたり、
一時ファイルを削除したり、
メモリを解放したり
code:ts
const getResource = () => {
// リソースの初期化処理
...
return {
// リソースを開放する処理
}
}
}
code:ts
export function doSomeWork() {
using file = getResource();
// ファイルを使用...
if (someCondition()) {
// 追加作業...
return;
}
}// ↑スコープ出る直前にdisposeが呼ばれる
code:ts
function loggy(id: string): AsyncDisposable {
console.log(Constructing ${id});
return {
console.log(Disposing (async) ${id});
await doWork();
},
}
}
await using a = loggy("a");
複数のcleanupに便利
code:ts
function doSomeWork() {
const path = ".some_temp_file";
const file = fs.openSync(path, "w+");
using cleanup = new DisposableStack();
cleanup.defer(() => {
fs.closeSync(file);
fs.unlinkSync(path);
});
// ファイルを使用...
if (someCondition()) {
// 追加作業...
return;
}
// ...
}
code:tsconfig.json
{
"compilerOptions": {
"target": "es2022",
}
}