小编Lim*_*s21的帖子

如何在 deno 中强类型化 Oak 上下文状态对象?

我想在 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)

typescript deno oak

10
推荐指数
1
解决办法
1331
查看次数

标签 统计

deno ×1

oak ×1

typescript ×1