如何配置TypeScript 5.2以使用using关键字?
解决TypeScript 5.2.2中使用Disposable与using关键字的问题
1. 修正tsconfig.json配置
要启用显式资源管理特性,需调整配置项并移除无效的库声明:
{ "compilerOptions": { "target": "es2022", // 最低需设置为ES2022,保留esnext也可正常工作 "module": "commonjs", "noImplicitAny": true, "esModuleInterop": true, "noEmitOnError": true, "moduleDetection": "force", "noUnusedLocals": false, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "lib": [ "esnext", "dom" // 移除不被支持的esnext.disposable ], "experimentalExplicitResourceManagement": true // 关键:启用显式资源管理实验特性 } }
2. 调整using语法
TypeScript 5.2支持的using并非函数式写法,而是块级作用域内的声明式语法:
const getFile = () => { return { [Symbol.dispose]: () => { console.log('x!') } } satisfies Disposable; // 可选:用satisfies确保类型符合Disposable规范 } console.clear() // 用块级作用域包裹using声明,作用域结束时自动触发释放逻辑 { using file = getFile(); // 在此处理file相关逻辑 }
如果是异步资源(实现Symbol.asyncDispose),则使用await using语法:
const getAsyncFile = () => { return { [Symbol.asyncDispose]: async () => { console.log('async dispose!') } } satisfies AsyncDisposable; } async function run() { await using asyncFile = getAsyncFile(); // 执行异步操作 }
3. 确保ts-node兼容性
ts-node 10.9.1可读取tsconfig中的实验性配置,若运行仍有问题,建议升级ts-node至v12及以上版本,以获得更完善的实验特性支持。
内容的提问来源于stack exchange,提问作者Radex
相关产品推荐
相关产品推荐

