You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:58:31