背景
我正在做一个简单的网站,用户可以上传图片。我使用Node/React/Multer/Typescript。
问题
app.post('/admin/uploads', async (req, res) => {
uploadHandler(req, res, (err) => {
...
if ( req.files.companyImage !== undefined ) {
...
}
res.sendStatus(201);
});
});
typescript intellisense显示如下错误。
Property 'companyImage' does not exist on type '{ [fieldname: string]: File[]; } | File[]'.
Property 'companyImage' does not exist on type '{ [fieldname: string]: File[]; }'.ts(2339)
但是,我不明白为什么这是错误的。我认为files
对象有类型{ [fieldname: string]: File[]; }
。这意味着files
对象可以有字符串属性。
所以我用简单的例子来测试。
type myType = {
[fieldName: string]: number
}
let req: myType = {
a: 333,
b: 344
}
console.log(req.a);
console.log(req.c); // undefined but intellisense don't show error
我不知道为什么files
对象不能有companyImage
属性。
请结帐.
3条答案
按热度按时间rsl1atfo1#
我不知道您是否成功地解决了您的问题,但我遇到了相同的问题,必须显式地告诉TypeScript我的
req.files
属性的类型,如下所示:注意,因为我使用的是
upload.fields(...)
,所以我没有指定req.files
也可以是简单的Express.Multer.File[]
。nom7f22z2#
由于您使用的是typescript,因此请为文件创建一个接口
然后声明
const files = req.files as IFile[]
,并记住将files: IFile;
添加到types/express/index.d.ts中,如下所示q9yhzks03#
我用
Object.assign(req.files)
解出了它,然后你可以把它当作一个对象来处理:console.log(s.image[0].path);