Аргумент типа ‘(req: ProtectedRequest, res: Response, next: NextFunction)’ не может быть присвоен параметру типа ‘AsyncFunction’

#node.js #typescript #express

#node.js #машинописный текст #выразить

Вопрос:

Я пишу экспресс-серверную часть, используя машинопись. Я настроил тип запроса в вызываемом файле app-requsest.d.ts , он содержит: PublicRequest , ProtectedRequest . Когда я назначил один из них для req данных типа as, но VS code возвращает ошибку. Это выглядит как:

 Argument of type '(req: ProtectedRequest, res: Response<any>, next: NextFunction) => Promise<void>' is not assignable to parameter of type 'AsyncFunction'
 

Вот мой код:

app-request.d.ts

 import { Request } from 'express';
import User from '../database/model/User';
import Keystore from '../database/model/Keystore';

declare interface PublicRequest extends Request {
  apiKey: string;
}

declare interface ProtectedRequest extends Request {
  user: User;
  accessToken: string;
  keystore: Keystore;
}
 

signup.ts

 import express from 'express';
import { SuccessResponse } from '../../../middleware/ApiResponse';
import UserRepo from '../../../database/repository/UserRepo';
import User from '../../../database/model/User';
import validator from '../../../helpers/validator';
import asyncHandler from '../../../helpers/asyncHandler';
import { BadRequestError } from '../../../middleware/ApiError';
import bcrypt from 'bcrypt';
import schema from './schema';
import _ from 'lodash';
import { PublicRequest } from 'app-request';

const router = express.Router();

router.post(
  '',
  validator(schema.signup),
  asyncHandler(async (req: PublicRequest, res) => {
    const user = await UserRepo.findByEmail(req.body.email);
    if (user) throw new BadRequestError('User already registered');

    const passwordHash = await bcrypt.hash(req.body.password, 10);

    const { user: createdUser } = await UserRepo.create(
      {
        fullname: req.body.fullname,
        username: req.body.username,
        phone: req.body.phone,
        email: req.body.email,
        profilePicUrl: req.body.profilePicUrl,
        password: passwordHash,
      } as User
    );

    new SuccessResponse('Signup Successful', {
      user: _.pick(createdUser, ['_id', 'fullname', 'name', 'phone', 'email', 'profilePicUrl'])
    }).send(res);
  }),
);

export default router;
 

Я пытался это исправить, но я не знаю причины.

Может кто-нибудь показать причину и проинструктировать меня, как исправить? Спасибо