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

Deno文件顶层使用await报“仅能在async函数内”错误的解决

问题根源

你碰到的这个报错根本不是Deno运行时抛出的执行错误——你写的代码在Deno环境下可以正常运行,飘红完全是VSCode的TypeScript语言服务配置不对:

  • 默认情况下TS会把当前项目识别为CommonJS模块,这类模块规范本身不允许在文件全局顶层作用域直接写await
  • Deno从1.0版本开始就原生支持ES模块规范下的顶层await,所以完全不存在“代码不符合Deno规则”的问题,只是编辑器没识别对模块类型才报的错
实际修复步骤
  • 给项目加匹配Deno规则的TS配置
    在项目根目录创建deno.json文件,加上对应的编译选项,告诉TS当前项目用ES2022模块规范:
    {
      "compilerOptions": {
        "module": "ES2022",
        "target": "ES2022"
      }
    }
    
    配完重启下VSCode的TS服务,原来飘红的报错会直接消失,一行业务代码都不用改。
  • 确认VSCode的Deno扩展正常生效
    如果配完还是报错,就去检查扩展设置:
    • 确保当前项目的deno.enable开关是打开的
    • 别让编辑器把项目自动识别成Node.js的CommonJS项目,这类识别规则会直接把顶层await的语法支持关掉
补充提醒

网上很多老教程会让你把所有代码包进一个立即执行的async函数来消报错,写出来大概是这样:

async function startApp() {
  await db.connect();
  app.start({ port: 5000 });
}
startApp();

这种写法本质是为了迁就旧的TS校验逻辑加的冗余代码,在原生支持顶层await的Deno环境下完全没必要这么写。

内容的提问来源于stack exchange,提问作者Rogier de Ruijter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 17:45:02