我有一个javascript代码,我想把它转换成typescript
route.get('/order', async(req,res) => {
var sessionData = req.session;
if(typeof sessionData.user === 'undefined')
{
res.redirect('/panel/login');
}
这是我的一段代码,过去在javascript
中可以正常工作,但现在在user
中出现此错误:
类型“会话&部分”上不存在属性“user”
我假设我应该为sessionData
变量和(req, res)
参数添加类型,但是我不知道应该为它分配什么类型。
PS:我知道这个问题看起来重复,但我已经尝试了其他类似问题的解决方案,它没有工作
任何帮助都将不胜感激。
6条答案
按热度按时间vxbzzdmp1#
正如express-session types注解中所述,必须使用
Declaration merging
。下面是在
express-session
上实现Declaration merging
的方法:4dbbbstv2#
我刚刚遇到了和你一样的问题。这似乎是一个相当新的问题:see explanation here .
为了解决这个问题,我重载了Github问题中描述的模块:
只需将
string
替换为该字段所需的任何类型。我还在
tsconfig.json
中添加了./typing-stubs
hkmswyz63#
追踪源代码,你会发现这样一个注解:
继续阅读文档;你会发现一个模块增强部分:https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
现在,您自己扩充“SessionData”并在以下位置向其添加“user”:源代码/类型/快速会话/索引.d.ts:
您的tsconfig.json应该设置类型根以在编译中包含声明:
b09cbbtk4#
我最近遇到了这个问题,这里是我想出的解决方案。
字符串
hgc7kmma5#
这是供将来参考的,对于已经完成上述所有步骤但仍然失败的人(vscode不再显示错误,但仍然失败),这可能是
ts-node
问题,添加--transpile-only
到您的package.json
脚本,如下所示:nodemon --exec ts-node -T src/app.ts
.来源:Typescript Declaration Merging fail about Express Request
djp7away6#
我刚做了这个
ISession是一个导出接口,它包含:
所有其他的建议都说重写类型声明,那些建议对我不起作用。这是唯一起作用的。希望这对大家有帮助。