面试题答案
一键面试- 首先,创建一个自定义的
Request
类型扩展:import { Request as ExpressRequest } from 'express'; declare global { namespace Express { interface Request { user: { name: string; age: number }; } } }
- 然后,实现中间件:
import express, { Request, Response, NextFunction } from 'express'; const app = express(); const addUserMiddleware = (req: Request, res: Response, next: NextFunction) => { req.user = { name: 'John', age: 30 }; next(); }; app.use(addUserMiddleware); app.get('/', (req: Request, res: Response) => { res.json({ user: req.user }); }); const port = 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });
在上述代码中,通过 declare global
扩展了 Express.Request
类型,为其添加了 user
属性。然后实现了一个中间件 addUserMiddleware
,在这个中间件中给 req
对象添加了 user
属性。这样在后续路由处理函数中使用 req.user
时就具备类型安全了。