DEV Community

Nikhil Agrawal
Nikhil Agrawal

Posted on

How I Fixed My TypeScript Setup Issue: Property user does not exist on type Request.

The Problem
I’ve been working on a Node.js project with TypeScript and Express.js. At one point, I needed to attach a user object to the Express Request object, but I ran into this TypeScript error:

Property 'user' does not exist on type 'Request'.

I quickly realized that this happens because Express's default Request object doesn't include a user property, and TypeScript wasn’t happy about it.

My Initial Fix
To fix this, I extended the Request interface to add the user property. Here’s how I did it:

  1. I created a new file called express.d.ts in the types folder in my project:
// src/types/express.d.ts
import { User } from '@prisma/client'; // Assuming User is a Prisma model

declare global {
    namespace Express {
        interface Request {
            user?: User; // Add user to the Request interface
        }
    }
}
Enter fullscreen mode Exit fullscreen mode
  1. I updated my tsconfig.json to ensure TypeScript picked up this new type:
{
  "compilerOptions": {
    //extra options here
    "typeRoots": ["./node_modules/@types", "./src/types"] // Add the types folder
  }
}

Enter fullscreen mode Exit fullscreen mode

At this point, the error disappeared from my code editor, so I thought I had fixed the problem. But when I tried running the project, I hit another error in the terminal:

error TS2339: Property 'user' does not exist on type 'Request'.

Stuck for Days
I spent 3-4 days troubleshooting this, trying everything I could find online. I was completely stuck and couldn’t figure out why it wasn’t working.

The Solution
Finally, I discovered the root issue and fixed it with these steps:

  1. Install TypeScript Globally: I realized I didn’t have the TypeScript compiler (tsc) installed globally, so I ran this command:

npm install -g typescript

  1. Run the TypeScript Compiler in Watch Mode: I used the --watch flag to automatically recompile my TypeScript code as I worked:
    tsc --watch

  2. Restart My Code Editor: I restarted my editor (VS Code in my case) to make sure everything was loaded properly.

  3. Run the Project: After restarting, I ran the project again—and it worked!

Conclusion
What I thought would be a small issue turned into days of frustration, but I finally got it working! If you're facing similar problems with TypeScript not recognizing new properties on Express’s Request object, remember to:

Extend the Request interface correctly.
Make sure TypeScript’s compiler (tsc) is installed and running properly.
Hopefully, this helps anyone else who's been stuck like I was!

Top comments (0)