Conversion of type 'void & Promise<UploadTask>' to type 'UploadTask' may be a mistake because neither type sufficiently overlaps with the other. Type 'void & Promise<UploadTask>' is missing the following properties from type 'UploadTask': on, off, remove, delete <ArkTSCheck>
这个错误提示说,您试图将 void & Promise<UploadTask>
类型的值转换为 UploadTask
类型,但这两种类型的重叠不足,也就是说它们的属性不匹配。void & Promise<UploadTask>
类型缺少 UploadTask
类型所具有的 on
、off
、remove
、delete
这些属性,所以这样的类型转换可能是不正确的。
您需要检查代码中进行这种类型转换的地方,可能需要调整代码逻辑,以避免这种不恰当的类型转换,或者找到正确的方式来处理这两种不同类型的值。
const task = await request.uploadFile(context, {
url: 'https://hmajax.itheima.net/api/uploadimg',
header: {
'content-type': 'multipart/form-data'
},
method: http.RequestMethod.POST,
data: [],
files: [{
filename: imgName,
name: 'img',
uri: `internal://cache/${imgName}`,
type: imgName?.split('.').pop()
}]
}) as request.UploadTask
task.on('headerReceive', (res: object) => {
const IRes = res as IUploadRes
const imgUrl = JSON.parse(IRes.body) as IBody
//AlertDialog.show({ message: imgUrl.url })
this.avatar = imgUrl.data.url
})
这段代码中的错误正如之前的错误提示所说,您将 await request.uploadFile
的结果强制转换为 request.UploadTask
类型是不正确的,因为实际返回的类型 void & Promise<UploadTask>
与 request.UploadTask
类型不完全匹配,导致后续使用 task.on
时出现错误,因为实际返回的类型中没有 on
方法。
您可能需要检查 request.uploadFile
方法的正确返回类型和使用方式,也许应该通过 then
方法来处理其成功的结果。
request.uploadFile(context, {
url: 'https://hmajax.itheima.net/api/uploadimg',
header: {
'content-type': 'multipart/form-data'
},
method: http.RequestMethod.POST,
data: [],
files: [{
filename: imgName,
name: 'img',
uri: `internal://cache/${imgName}`,
type: imgName?.split('.').pop()
}]
})
.then((task) => {
task.on('headerReceive', (res: object) => {
const IRes = res as IUploadRes
const imgUrl = JSON.parse(IRes.body) as IBody
//AlertDialog.show({ message: imgUrl.url })
this.avatar = imgUrl.data.url
})
})
这样也是完成了,但是还是灭有用 await的方法