将 multer 与打字稿一起使用:属性 'file' 在类型 'Request'.ts(2339) 上不存在

uisng multer with typescript: Property 'file' does not exist on type 'Request'.ts(2339)

我正在使用 https://www.npmjs.com/package/multer 库,我的 node.js 应用是用打字稿编写的。

我的代码中出现以下打字稿错误。

Property 'file' does not exist on type 'Request'.ts(2339)

    public document = async (req: Request, res: Response): Promise<any> => {
        const documentFile = req.file;
    }

我该如何解决这个问题。 req 是明确的 Request 对象,但 multers 中间件将 .file 附加到此请求对象中。但是它不知道这一点,因为类型请求接口最初没有正确包含文件

也许我们可以扩展请求

interface MulterRequest extends Request {
    file: any;
}

 public document = async (req: Request, res: Response): Promise<any> => {
   const documentFile  = (req as MulterRequest).file;
 }

或者可能像这样的代码

interface MulterRequest extends Request {
    file: any;
}

 public document = async (req: MulterRequest , res: Response): Promise<any> => {
   const documentFile  = req.file;
 }

或安装@types/multer并检查这个https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18569