Unable to extend Express Request in TypeScript
I've had the same issue...
Can't you just use an extended request? like:
interface RequestWithUser extends Request {
user?: User;
}
router.post('something',(req: RequestWithUser, res: Response, next)=>{
const user = req.user;
...
}
On another note, if you're using async callbacks with express make sure to user express-async wrappers or make sure you know exactly what you're doing. I recommend: awaitjs
The problem is that you are not augmenting the Express
global namespace defined by express
you are creating a new namespace in your module (the file becomes a module once you use an import
).
The solution is to declare the namespace in global
import { User } from "./src/models/user";
declare global {
namespace Express {
export interface Request {
user: User;
}
}
}
Or not use the module import syntax, just reference the type:
declare namespace Express {
export interface Request {
user: import("./src/models/user").User;
}
}