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.