Аргумент типа '(req: Request, res: IResponse, next: NextFunction) => void' нельзя назначить параметру типа 'PathParams' с помощью express.js - PullRequest
0 голосов
/ 02 октября 2019

Я создаю обработчик маршрута и хочу добавить его в свои маршруты:

import { Request, Response, NextFunction } from "express";

interface IResponse extends Response {
  error: (code: number, message: string) => Response;
  success: (code: number, message: string, result: any) => Response
}
const routeHandler = (req: Request, res: IResponse, next: NextFunction) => {
  res.error = (statusCode: number, errorMessage: string) => res.status(statusCode).json(errorMessage);
  res.success = (statusCode: number, message: string, result: any) => res.status(statusCode).json({
    message,
    result
  });
  return next();
};

export default routeHandler;

, когда я добавил этот обработчик в файл индекса маршрутов:

import { Router } from "express";
import routeHandler from "../utils/helpers";

const routes = Router();
routes.use(routeHandler);

export default routes;

Iполучил эту ошибку:

No overload matches this call.
  The last overload gave the following error.
    Argument of type '(req: Request, res: IResponse, next: NextFunction) => void' is not assignable to parameter of type 'PathParams'.
      Type '(req: Request, res: IResponse, next: NextFunction) => void' is missing the following properties from type '(string | RegExp)[]': pop, push, concat, join, and 25 more.ts(2769)
index.d.ts(55, 5): The last overload is declared here.

1 Ответ

1 голос
/ 02 октября 2019

Express ничего не знает о вашем интерфейсе IResponse. Таким образом, метод не может соответствовать.

Чтобы реализовать свою идею, используйте расширение модуля

import { Request, Response, NextFunction } from "express";

declare module 'express-serve-static-core' {
    interface Response {
        error: (code: number, message: string) => Response;
        success: (code: number, message: string, result: any) => Response
    }
}

const routeHandler = (req: Request, res: Response, next: NextFunction) => {
    res.error = (statusCode: number, errorMessage: string) => res.status(statusCode).json(errorMessage);
    res.success = (statusCode: number, message: string, result: any) => res.status(statusCode).json({
        message,
        result
    });
    return next();
};

export default routeHandler;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...