如何使用TypeScript扩展Express中的Request对象
大家好!我正在用TypeScript写Express后端,遇到了Request对象的类型化问题。
我有一个middleware,在认证后向请求中添加用户数据。我大致是这样做的:
```typescript
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
interface UserPayload {
id: string;
email: string;
role: 'admin' | 'user';
}
export const authMiddleware = (req: Request, res: Response, next: NextFunction) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) {
return res.status(401).json({ message: '没有token' });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as UserPayload;
req.user = decoded; // TypeScript错误:类型'Request'上不存在属性'user'
next();
} catch (error) {
return res.status(403).json({ message: '无效的token' });
}
};
```
TypeScript报错,说Request对象上