【发布时间】:2022-02-18 03:40:41
【问题描述】:
我的 Express Request 对象上的 Typescript 打字似乎有问题。该项目目前包含 2 个子项目(用户服务和一个包含可重用错误和中间件的公共项目)
common 文件夹作为依赖项安装在用户服务中,例如: "@myPackage/common": "file:../common",
我有一个当前用户中间件:
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
interface UserPayload {
id: string;
email: string;
}
declare global {
namespace Express {
interface Request {
currentUser?: UserPayload;
}
}
}
const currentUser = (
req: Request,
res: Response,
next: NextFunction,
) => {
if (!req.session?.jwt) {
return next();
}
try {
const payload = jwt.verify(
req.session.jwt,
process.env.JWT_KEY!,
) as UserPayload;
req.currentUser = payload;
} catch (err) {
console.error(err);
}
return next();
};
export default currentUser;
为 Request 对象的 currentUser 属性声明一个全局变量。
在我的用户服务项目中,我有以下路线
import express, { Request, Response } from 'express';
import { Middlewares } from '@myPackage/common';
const router = express.Router();
router.get('/api/users/currentuser', Middlewares.currentUser, (
req: Request,
res: Response,
) => {
res.send({ currentUser: req.currentUser || null });
});
export default router;
在req.currentUser 上,我收到以下错误消息:
“Request
>”类型上不存在属性“currentUser”。
不应该在您导入它的代码中自动接管包类型吗?我希望我清楚问题是什么:)
【问题讨论】:
-
This answer 展示了如何扩展
Response对象,Request对象可以类似处理。
标签: node.js typescript express