typescript构建koa工程ctx.render和ctx.session报错

发布于 2022-09-12 02:23:15 字数 1839 浏览 31 评论 0

package.json

image.png

tsconfig.json

image.png

app.ts

import * as Koa from 'koa'
import * as Router from 'koa-router'
import * as path from 'path'
import * as koaStatic from 'koa-static'
import * as session from 'koa-session'
const render = require('koa-art-template');

const app = new Koa();
const router = new Router();

// 配置art-template
render(app, {
    root: path.join(__dirname, 'views'),
    extname: '.html',
    debug: process.env.NODE_ENV !== 'production'
});
app.use(koaStatic(__dirname + '/static'));

// 配置session中间件
app.keys = ['some secret hurr']; // cookie的签名

const CONFIG = {
    key: 'koa:sess', // cookie的key
    maxAge: 86400000, // 过期时间
    autoCommit: true, // 是否自动提交到响应头
    overwrite: true, // 是否允许重写
    httpOnly: true,
    signed: true, // 是否签名
    rolling: false, // 是否每次响应时刷新Session的有效期
    renew: false, // 是否在Session快过期时刷新Session的有效期
};

app.use(session(CONFIG, app));

router.get('/', async (ctx: any) => {
    console.log(ctx.session.userinfo)
    await ctx.render('index')
})

router.get('/login', async (ctx: any) => {
    ctx.session.userinfo = '张三';
    ctx.body = '登录成功'
})

router.get('/news', async (ctx: any) => {
    console.log(ctx.session.userinfo)
    ctx.body = '这是一个新闻'
})

// 启动路由
app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000)

如果像我上面的代码这么写是没有问题的,art-template也可以渲染,session也可以访问,但是在router.get方法里的ctx没有代码提示比如会出现下图的情况
image.png
我知道是因为ctx的类型为any导致的,但是,如果我把any去掉,使用ts的类型检查,会出现下列情况
image.png
本人小白,请求大佬解救,我还是想使用ts的类型检查来写代码,我猜测是不是koa-router已经不推荐使用ctx.render和ctx.session这两种方法了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤君无依 2022-09-19 02:23:16

koa-router 和 koa-session 是两个插件,他们的类型没有组合起来

试试添加 typings/index.d.ts 文件

import session from "koa-session";

declare module "koa-router" {
    export interface IRouterParamContext<StateT = any, CustomT = {}> {
        session: session.Session | null;
        readonly sessionOptions: session.opts | undefined;

    }
}

如果没效果,关了 VS 重新打开一下试试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文