TypeScript5.2 引入了一个新的关键字 using, 它可以用来处理任何具有 Symbol.dispose 函数的对象,当它离开作用域时立即释放。 { const getResource = () => { return { [Symbol.dispose]: () => { console.log('Hooray!') } } } using resource = getResource(); } // 'Hooray!' logged to console Await using 可以使用 Symbol.asyncDispose 与 await using 来处理需要异步释放的资源,例如通过文件句柄访问文件系统 使用 using 之前 import { open } from "node:fs/promises"; let filehandle; try { filehandle = await open("thefile.txt", "r"); } finally { await filehandle?.close(); } 使用 using import { open } from "node:fs/promises"; const getFileHandle = async (path: string) => { const filehandle = await open(path, "r"); return { filehandle, [Symbol.asyncDispose]: async () => { await filehandle.close(); }, }; }; { await using file = await getFileHandle("thefile.txt"); // 使用 file.filehandle 做一些事情 } // 自动释放! 还有数据库链接,使用 using 之前 const connection = await getDb(); try { // 使用 connection 做一些事情 } finally { await connection.close(); } 使用 using const getConnection = async () => { const connection = await getDb(); return { connection, [Symbol.asyncDispose]: async () => { await connection.close(); }, }; }; { await using db = await getConnection(); // 使用 db.connection 做一些事情 } // 自动关闭! 译文:译:TypeScript 5.2 的新关键词 using – 云谦的博客 原文:TypeScript 5.2’s New Keyword: ‘using’ | Total TypeScript