如何修复错误?打字稿:类型 'ErrorRequestHandler' 是不能分配给键入 'IMiddleware'
问题描述:
在下面的代码,我得到了与类型重新分配的错误:如何修复错误?打字稿:类型 'ErrorRequestHandler' 是不能分配给键入 'IMiddleware'
export default class AbstractController extends Middleware {
get middleware(): Express.RequestHandler | Express.ErrorRequestHandler { // (6,22)
//...
}
}
错误文本:
src/controller/AbstractController.ts(6,22): error TS2415: Class 'AbstractController' incorrectly extends base class 'Middleware'.
Types of property 'middleware' are incompatible.
Type 'ErrorRequestHandler | RequestHandler' is not assignable to type 'IMiddleware'.
Type 'ErrorRequestHandler' is not assignable to type 'IMiddleware'.
声明RequestHandler和ErrorRequestHandler接口:
interface RequestHandler {
(req: Request, res: Response, next: NextFunction): any;
}
interface ErrorRequestHandler {
(err: any, req: Request, res: Response, next: NextFunction): any;
}
申报中间件类:
export interface IMiddleware {
(req: http.IncomingMessage, res: http.ServerResponse): void;
}
export default class Middleware {
get middleware(): IMiddleware {
throw new Error('Не определен middleware.');
}
}
我需要了解如何解决它,但是错误的原因是什么。
答
Middleware
类预计IMiddleware
返回类型为middleware()
。
您的接口应扩展IMiddleware!
interface RequestHandler extends IMiddleware {
(req: Request, res: Response, next: NextFunction): any;
}
interface ErrorRequestHandler extends IMiddleware {
(err: any, req: Request, res: Response, next: NextFunction): any;
}
但是,ErrorRequestHandler
的签名不匹配IMiddleware
也许你应该创建第二个接口来代表它。