typescript构建koa工程ctx.render和ctx.session报错
package.json
tsconfig.json
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没有代码提示比如会出现下图的情况
我知道是因为ctx的类型为any导致的,但是,如果我把any去掉,使用ts的类型检查,会出现下列情况
本人小白,请求大佬解救,我还是想使用ts的类型检查来写代码,我猜测是不是koa-router已经不推荐使用ctx.render和ctx.session这两种方法了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
koa-router 和 koa-session 是两个插件,他们的类型没有组合起来
试试添加
typings/index.d.ts
文件如果没效果,关了 VS 重新打开一下试试。