严格模式下的tsconfig问题和类型(...)不能分配给类型(...)

问题描述 投票:0回答:1

我知道有很多关于这个的问题,我确实阅读了大部分内容(我猜)并且它们帮助我更好地理解了这个错误,以及如何在大多数情况下解决它。

然而,我面对的是一个我自己无法解决的问题,如果SO不是这个问题的好地方,那么道歉(我想这可能是一个骗局,因为已经有关于这个问题的问题,但我没有找到任何帮助我解决这个“特殊情况”)。

我有以下代码:

import { Request } from 'express'
import multer from 'multer'
import path from 'path'

class ImageMiddleware {

    // ...

    private storage (folder: string): multer.StorageEngine {
        return multer.diskStorage({
            destination: (
                _req: Request,
                _file: Express.Multer.File,
                callback: (error: Error | null, destination: string) => void
            ): void => {
                return callback(null, `./public/img/${folder}`)
            },
            filename: (
                req: Request,
                file: Express.Multer.File,
                callback: (error: Error | null, destination: string) => void): void => {
                callback(
                    null,
                    `${file.fieldname}`
                    + `-`
                    + `${Date.now()}`
                    + `${req.user.id}`
                    + `${path.extname(file.originalname)}`
                )
            },
        })
    }

    // ...
}

export default new ImageMiddleware()

有了这个tsconfig.json:

{
    "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "outDir": "./dist/",
        "sourceMap": true,
        "removeComments": true,
        "pretty": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "alwaysStrict": true,
        "noImplicitThis": true,
        "noImplicitAny": true,
        "allowUnreachableCode": false,
        "esModuleInterop": true,
        "strict": true
    },
    "exclude": ["**/spec/*.spec.ts", "./node_modules"]
}

但是当运行./node_modules/typescript/bin/tsc时,我有以下错误:

services/middlewares/image/image.middleware.ts:112:13 - error TS2322: Type '(_req: Request, _file: File, callback: (error: Error | null, destination: string) => void) => void' is not assignable to type 'string | ((req: Request, file: File, callback: (error: Error | null, destination: string) => void) => void) | undefined'.
  Type '(_req: Request, _file: File, callback: (error: Error | null, destination: string) => void) => void' is not assignable to type '(req: Request, file: File, callback: (error: Error | null, destination: string) => void) => void'.
    Types of parameters '_req' and 'req' are incompatible.
      Type 'Request' is missing the following properties from type 'Request': get, header, accepts, acceptsCharsets, and 71 more.

112             destination: (
                ~~~~~~~~~~~

  node_modules/@types/multer/index.d.ts:59:9
    59         destination?: string | ((req: Express.Request, file: Express.Multer.File, callback: (error: Error | null, destination: string) => void) => void);
               ~~~~~~~~~~~
    The expected type comes from property 'destination' which is declared here on type 'DiskStorageOptions'

所以我猜): void => {线是错误的,因此我尝试了很多东西来调试它,但没有找到任何成功的东西。

./node_modules/typescript/bin/tsc -v的输出是Version 3.3.4000

欢迎任何帮助,如果我忘记了一些相关信息,请告诉我

typescript types multer tsconfig
1个回答
0
投票

因为这个错误在node_modules中,修复它的唯一希望是对typings存储库的pull请求。

现在为了使错误变为静止,请转到“skipLibCheck”:在tsconfig中为true。

编辑:抱歉误读了错误的来源。

“参数类型'_req'和'req'是不兼容的。”我怀疑如果你使用快递你最终有两种类型的“请求”,标准打字稿库中有一个输入1个函数,另一个类型用于表达使用的快递中的“请求”。

© www.soinside.com 2019 - 2024. All rights reserved.