我想在 deno 中强类型化 Oak 提供的 context.state 对象。我已经看到了如何实现这一点的方法(例如Deno Oak v10.5.1 context.cookies never be set),但还没有设法在我自己的代码中实现它。
我的目标是访问每个中间件中的强类型 context.state。
这是 context.state 的接口:
interface State {
userID: number;
sessionID: number;
}
Run Code Online (Sandbox Code Playgroud)
这将是我用于设置 context.state 的中间件函数之一,我在其中尝试访问上下文状态属性:
const contextMiddleware = async (context: Context, next: () => Promise<unknown>): Promise<void> => {
context.state.userID = 123;
context.state.sessionID = 456;
await next();
delete context.state.userID;
delete context.state.sessionID;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在 contextMiddleware 函数中,这两个属性的类型为any,而不是预期的数字类型。此外,智能感知无法识别这些自动完成属性。
我发现解决方案可能是将 IState 接口作为泛型传递给调用中间件的 Application 和 Router 对象,然后设置 contextMiddlewate 函数以使用来自 Oak import mod.ts 的相同泛型键入 RouterMiddleware 或 Middleware。
这可能看起来像这样,但目前不起作用:
import {
Application, …Run Code Online (Sandbox Code Playgroud)