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

为何设置target: es2017后TypeScript仍转译async/await?

问题原因及解决方法

为什么target参数看似未生效?

  • tsconfig.json未被正确加载:如果执行tsc时直接指定单个文件(比如tsc index.ts),TypeScript会忽略tsconfig.json,改用默认配置(默认target通常为es3或es5),这时候就会将async/await转译为辅助函数。
  • 配置存在冲突或遗漏:比如命令行参数--target覆盖了配置文件的设定,或者显式设置lib时未包含es2017,导致编译时无法识别该版本的语法支持。
  • TypeScript版本过低:旧版本TS对es2017的语法保留逻辑不完善,和Playground使用的新版本行为不一致。

实现Playground效果的步骤

  1. 确保tsconfig.json被正确读取
    • 不要直接指定单个文件编译,直接运行tsc命令,它会自动加载当前目录下的tsconfig.json。
    • 若需编译特定文件,在tsconfig的include数组中添加目标文件:
      {
        "compilerOptions": {
          "target": "es2017"
        },
        "include": ["index.ts"]
      }
      
  2. 修正配置冲突
    • 避免同时使用命令行--target参数,它会覆盖配置文件的设置。
    • 如果显式设置了lib,确保包含es2017:
      "lib": ["es2017", "dom"]
      
  3. 升级TypeScript版本
    • 运行npm install typescript@latest --save-dev,将本地TS版本升级到和Playground一致的最新稳定版。
  4. 验证效果
    • 编写测试代码:
      async function fetchData() { await Promise.resolve('data'); }
      
    • 执行tsc后查看生成的JS文件,应该直接保留async function fetchData() { await Promise.resolve('data'); },而非生成__awaiter和__generator辅助函数。

内容的提问来源于stack exchange,提问作者Dan Fabulich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:36:35