我是一个打字新手,正在尝试集成koa-router和koa-passport。已安装所有@types\
import Koa from "koa";
import Route from "koa-router";
import passport from "koa-passport";
import session from "koa-session";
const app = new Koa();
const router = new Route();
app.keys = [process.env.SECRET_KEY || "secret"];
app.use(session({}, app));
app.use(passport.initialize());
app.use(passport.session());
app.use(router.routes()).use(router.allowedMethods());当我尝试在router中使用passport方法时。
router.post("Logout", "/logout", ctx => {
if (ctx.isAuthenticated()) {
ctx.logout();
}
});在上下文(Ctx)方法上出错
Property 'isAuthenticated' does not exist on type 'ParameterizedContext<any, IRouterParamContext<any, {}>>'.
Property 'logout' does not exist on type 'ParameterizedContext<any, IRouterParamContext<any, {}>>'.我尝试了不同的方法,但都没有成功。感谢任何人的帮助。
发布于 2020-05-02 18:43:47
我发现一种方法是将所有路由定义为typeof KoaPassport,并将passport的功能和类型定义分开。对于路由,as Koa.Middleware也有这个问题
// src/index.ts
import routes from "./routes";
...
routes(router, model, passport);// src/routes/index.ts
function routes(router: Route, model: Model, passport: typeof KoaPassport) {
router
.post("Login", "/login", (async (ctx, next) => {
await passport.authenticate("local", async (err, user) => {
....
})(ctx, next);
}) as Koa.Middleware)
}发布于 2021-08-11 06:25:10
我发现的一种方法是使用
const router = new Route<{}, koa.Context>();koa-router类型将passport方法添加到https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/koa-passport/index.d.ts#L23中的koa.Context。Router的第二个类型参数允许我们向中间件上下文添加额外的属性。通过传入koa.Context,我们可以访问koa-router添加的功能。
https://stackoverflow.com/questions/59756522
复制相似问题