如何修复错误?打字稿:类型 'ErrorRequestHandler' 是不能分配给键入 'IMiddleware'

如何修复错误?打字稿:类型 '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

也许你应该创建第二个接口来代表它。