我如何解决Koa Session的TypeScript问题,使用Koa App是通用类型的?

问题描述 投票:0回答:1

我正在使用以下接口来定义koa的上下文& 状态。

export interface AppState extends Koa.DefaultState {
  //...
}
export interface AppContext extends Koa.DefaultContext {
  models: DomainModels;
  connection: Connection;
}

然后将koa实例化。

const app = new Koa<AppState, AppContext>();
app.use(session(sessionConfig, app));

问题是 Koa-session 使用声明合并,并导致以下错误。

Argument of type 'import("/Users/chance/Projects/pear/packages/api/node_modules/@types/koa/index.d.ts")<AppState, AppContext>' is not assignable to parameter of type 'import("/Users/chance/Projects/pear/packages/api/node_modules/@types/koa/index.d.ts")<DefaultState, DefaultContext>'.
  Types of property 'middleware' are incompatible.
    Type 'Middleware<ParameterizedContext<AppState, AppContext>>[]' is not assignable to type 'Middleware<ParameterizedContext<DefaultState, DefaultContext>>[]'.
      Type 'Middleware<ParameterizedContext<AppState, AppContext>>' is not assignable to type 'Middleware<ParameterizedContext<DefaultState, DefaultContext>>'.
        Type 'ParameterizedContext<DefaultState, DefaultContext>' is not assignable to type 'ParameterizedContext<AppState, AppContext>'.
          Type 'ExtendableContext & { state: DefaultState; } & DefaultContext' is missing the following properties from type 'AppContext': models, connection, session, sessionOptionsts(2345)

相关部分从 @types/koa-session:

declare function session(CONFIG: Partial<session.opts>, app: Koa): Koa.Middleware;

declare function session(app: Koa): Koa.Middleware

declare module "koa" {
    interface Context {
        session: session.Session | null;
        readonly sessionOptions: session.opts | undefined;
    }
}

我不想黑掉他们的类型,但我不知道如何干净利落地解决这个问题。谢谢!

...作为一个旁白,整个 Argument of type 'import("/Users/chance/Projects/pear/packages/api/node_modules/@types/koa/index.d.ts") 是令人难以置信的烦恼。我不知道为什么VS Code或TypeScript会报告这样的路径。

typescript typescript-typings koa
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.