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

将路由移至外部文件后Deno中TypeScript类型报错问题

问题原因与解决办法

原因

Deno的模块导入基于URL,只要两个文件导入oak时用的URL版本不同,Deno就会下载并使用两个独立的包。不同版本的oak内部的Context、Router等类型定义存在差异——哪怕你用的是原生JS文件,Deno默认会对JS文件做类型检查(比如默认启用的@ts-check),TypeScript会判定不同版本的Router实例类型不兼容,因此抛出app.use()参数类型不匹配的错误。

解决办法

1. 统一oak依赖版本(根本解决)

确保server.ts和routes.js导入的是完全相同版本的oak:

  • 直接在两个文件里使用相同的导入URL,比如都写:
    import { Router } from "https://deno.land/x/oak@v12.5.0/mod.ts"
    
  • 或者用导入映射统一管理依赖:
    在项目根目录创建import_map.json:
    {
      "imports": {
        "oak/": "https://deno.land/x/oak@v12.5.0/"
      }
    }
    
    然后两个文件都用统一路径导入:
    import { Router } from "oak/mod.ts"
    
    运行时加上参数加载导入映射:deno run --import-map=import_map.json server.ts

2. 禁用类型检查(无需TS类型的快速解决)

如果不想处理类型相关问题,可以直接关闭对应文件的类型校验:

  • 在routes.js文件顶部添加注释:// @ts-nocheck,这样Deno就不会对这个文件做类型检查,也就不会抛出类型不兼容的错误。
  • 若要全局禁用类型检查,运行时加上--no-check参数:deno run --no-check server.ts,但这种方式会关闭所有文件的类型提示,可能掩盖其他潜在问题,优先推荐给单个文件加// @ts-nocheck。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:22:13