Я знаю, что есть довольно много вопросов по этому поводу, я прочитал большинство из них (я полагаю), и они помогли мне лучше понять эту ошибку и способы ее решения в большинстве случаев.
Однако я сталкиваюсь с тем, что не могу решить самостоятельно, поэтому извиняюсь, если 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
Любая помощь будет приветствоваться, пожалуйста, дайте мне знать, если я забыл некоторые важные сведения