7

I am using Express.js and Passport to develop my web app. After recent update of project's dependencies I get this error:

FILE NAME.ts:LINE NUMBER:CHAR NUMBER - error TS2339: Property 'METHOD_NAME' does not exist on type 'User'.

LINE NUMBER           res.json(await req.user.METHOD_NAME());
FILE NAME.ts:LINE NUMBER:CHAR NUMBER - error TS2322: Type 'Express.User' is not assignable to type 'import("models/User").default'.

LINE_NUMBER         const user: User = req.user;

My model looks like:

import { Model } from "sequelize";

export default class User extends Model {
  public async METHOD_NAME(): Promise<any> {
    // ...
  }
}

I tried to overwrite the request definition but it does not work:

import UserModel from "models/User";

declare global {
  namespace Express {
    interface User extends UserModel {}
    interface Request {
      user?: User
    }
  }
}

These are some of my depdencies:

  "dependencies": {
    "@types/express-session": "^1.15.13",
    "@types/passport": "^1.0.0",
    "@types/passport-local": "^1.0.33",
    "@types/sequelize": "^4.28.4",
    "express": "^4.17.1",
    "express-fileupload": "^1.2.0",
    "express-session": "^1.16.2",
    "node-fetch": "^2.1.2",
    "passport": "^0.4.0",
    "passport-local": "^1.0.0",
    "sequelize": "^6.6.2",
    "sequelize-cli": "^6.2.0",
  },
  "devDependencies": {
    "@types/express": "^4.17.1",
    "@types/express-serve-static-core": "^4.17.1",
    "@types/node": "^15.12.2",
    "@types/node-fetch": "^2.1.1",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "^3.4.0",
    "tslint": "^6.1.3",
    "typescript": "^4.3.2"
  }

I think the correct way to do is to continue overwriting the definition through a .d.ts file, but I cannot get it right.

JohnJ
  • 71
  • 2
  • 3
    Does [this](https://stackoverflow.com/a/74840966/11306028) answer your question. Check the last code snippet in the answer – Dilshan Mar 07 '23 at 17:13
  • 1
    It kinda does ; I had to override passport User interface by extending my custom User class to it. Thank you !! – Denis Lebon Mar 09 '23 at 16:17

0 Answers0