如何修复Deno程序std模块依赖导致ReadableStream无getIterator编译错误
问题解决方法
错误原因
这个TS2339报错是依赖版本不兼容导致的:你当前使用的deno.land/std@0.83.0版本过旧,其中async/pool.ts的实现依赖了ReadableStream的getIterator方法,但新版Deno的全局类型定义已经移除了这个非标准方法,所以触发类型校验错误。你在routes.ts中自行添加的局部ReadableStream接口扩展无法覆盖全局类型定义,所以解决不了问题。
解决方案
方案1:永久修复(推荐)
统一升级所有依赖到适配当前Deno版本的新版:
- 删除
routes.ts中你自行添加的无效扩展代码:
// 删掉以下内容 interface ReadableStream<R> { getIterator(): any }
- 统一所有依赖的版本,避免多版本冲突:
- 修改
deps.ts,将oak锁定到适配新版Deno的稳定版本:
export { Application } from "https://deno.land/x/oak@v12.6.2/mod.ts"
- 修改
routes.ts中的oak导入地址,和deps.ts保持一致:
import { Router } from "https://deno.land/x/oak@v12.6.2/mod.ts";
- 修改
controller.ts中的mongo驱动版本,替换为适配新版Deno的版本:
import {MongoClient} from "https://deno.land/x/mongo@v0.31.0/mod.ts";
- 重新执行启动命令即可正常运行:
deno run --allow-all server.ts
方案2:临时绕过
如果暂时不想调整依赖,可以在启动命令中添加--no-check参数跳过TypeScript类型校验直接运行:deno run --no-check --allow-all server.ts
该方案仅适合临时测试,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者hagenek
相关产品推荐
相关产品推荐

