我运行一个简单的HTTP服务器,通过Deno,在Supabase托管。
当我在外部文件中移动路由定义时,TypeScript启动并开始抱怨参数类型。
- 注意:**我没有在我的代码中使用TS,我正在使用vanilla JS。
What was working
这是server.ts
:
import { Application, Router } from "https://deno.land/x/oak@v11.1.0/mod.ts";
const router = new Router()
const app = new Application();
app.use(router.routes());
await app.listen({ port: 4000 });
如果我只是在另一个模块中提取Router
示例,那么Typescript就会开始抱怨无效的类型。
是什么打破了它
创建一个routes.js
:
import { Router } from "https://deno.land/x/oak/mod.ts";
const router = new Router();
export default router;
并在server.ts
中使用它:
import { Application } from "https://deno.land/x/oak@v11.1.0/mod.ts";
import router from "./routes.js";
const app = new Application();
app.use(router.routes()); // <--- THIS THROWS ERROR
await app.listen({ port: 4000 });
use()
突然抱怨传入的参数类型不正确:
错误:TS2345 [ERROR]:“import(“www.example.com”)类型的参数。Middleware <Record <string,any>,import(“www.example.com”)。Context <Record <string,any>,Record <string,any>>>”不可分配给“import(“www.example.com”)类型的参数。Middleware <Record <string,any>,import(“www.example.com”)。Context <Record <string,any>,Record <string,any>>>”。https://deno.land/x/oak@v12.5.0/middleware.ts类型'import("https://deno.land/x/oak@v11.1.0/context.ts"). Context <Record <string,any>,Record <string,any>>'不可分配给类型'import("www.example.com"). Context <Record <string,any>,Record <string,any>>'。https://deno.land/x/oak@v12.5.0/context.tsapp.use(router. routes()); https://deno.land/x/oak@v11.1.0/middleware.ts ").Middleware<Record<string, any>, import("https://deno.land/x/oak@v11.1.0/context.ts ").Context<Record<string, any>, Record<string, any>>>'. Types of parameters 'context' and 'context' are incompatible. Type 'import("https://deno.land/x/oak@v11.1.0/context.ts").Context<Record<string, any>, Record<string, any>>' is not assignable to type 'import("https://deno.land/x/oak@v12.5.0/context.ts ").Context<Record<string, any>, Record<string, any>>'. Property '#wrapReviverReplacer' in type 'Context' refers to a different member that cannot be accessed from within type 'Context'. app.use(router.routes());
- 为什么
router.routes()
突然变成了错误的类型,而我只是简单地将它从当前文件中移出?*
这对我来说毫无意义。
我如何防止这种情况发生?我不想在任何地方都使用类型。
这段代码运行得很好,没有在Typescript的土地上结束。
1条答案
按热度按时间wecizke31#
我想明白了
更好地阅读大量和不可读的错误消息,我注意到提到了2个不同的
oak
版本:v12.5.0
和v11.1.0
。之所以会出现这种不对齐,是因为VSCode建议通过从导入URL重定向来“快速修复”导入的版本。我在编写代码时不知何故得到了不同的版本。
解决方法是:
https://deno.land/x/oak/mod.ts
(但是当获取latest
版本时,它会被破坏;需要deno vendor lock
)