簡體   English   中英

如何解決錯誤? 打字稿:類型'ErrorRequestHandler'不能分配給類型'IMiddleware'

[英]How do I fix the error? Typescript: Type 'ErrorRequestHandler' is not assignable to type '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不匹配

也許您應該創建第二個接口來表示它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM