Я пытаюсь настроить свой собственный интерфейс Response, чтобы расширить некоторые методы вместо использования типа Response по умолчанию для Express.js, но получаю ошибку TypeScript:
Последняя перегрузка выдала следующую ошибку. Аргумент типа '(req: Запрос, разрешение: CustomResponse, следующий: NextFunction) => void' не является назначаемый параметру типа PathParams.ts(2769)
Я исследовал много разных способов решения этой проблемы, например: declare namespace
но мне это не помогло, поэтому я решил выбрать другой способ, который является настраиваемым для моего интерфейса и расширяет интерфейс Response Express.js. Ниже мой код:
import { Response } from 'express';
interface CustomResponse extends Response {
myMethod: () => void;
}
...
app.use((req: Request, res: CustomResponse, next: NextFunction) => { // <=== error causing from CustomResponse
res.myMethod();
});
Если этот пример не работает, не могли бы вы рассказать, как вы пытались использовать его в своем коде?
Вы можете явно ввести приведение типа этого
app.use((req: Request, res: Response, next: NextFunction) => {
const customResponse = res as CustomResponse;
customResponse.myMethod();
//customResponse.send();
});
огромное спасибо, это должно быть в последнюю очередь.
Вы можете найти пример добавления пользовательского свойства к объекту экспресс-запроса с использованием слияния деклараций здесь