Express.js ve Passport Kullanıcı türünü (TypeScript) Üzerine Yaz


Web uygulamamı geliştirmek için Express.js ve Passport kullanıyorum. Projenin bağımlılıklarını son güncelledikten sonra bu hatayı alıyorum:

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;

Modelim şöyle görünüyor:

import { Model } from "sequelize";

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

İstek tanımını geçersiz kılmayı denedim ama işe yaramıyor:

import UserModel from "models/User";

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

Bunlar benim bazı bağımlılıklarım:

  "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"
  }

Bence doğru yol, bir .d.ts dosyası aracılığıyla tanımı tekrar tekrar yazmaya devam etmek, ama bunu doğru yapamıyorum.

İlgili makaleler