这段代码中的错误出现在事件监听器的参数类型上。addEventListener
的第二个参数应该是一个函数,而该函数没有定义参数。handleUpload
函数已经定义了一个参数 e
,它应该是 Event
类型。因此,需要将 handleUpload
作为 addEventListener
的第二个参数,并且不需要为它定义任何参数。
修改后的代码如下:
function onUpload() {
const input = document.createElement("input")
input.setAttribute("type", "file")
input.setAttribute("accept", "image/*")
input.addEventListener("input", handleUpload) // 这一行的 handleUpload 类型报错,现在解决了
input.click()
function handleUpload(e: Event) {
const target = e.target as HTMLInputElement
if (!target) return
const file = target.files![0]
if (!file) return
const type = file.type as ImageExcAll
if (!ImageFileTypes.includes(type)) return
fetchFileData(file)
const imgUrl = URL.createObjectURL(file)
dispatch(changeImgUrl(imgUrl))
}
function fetchFileData(file: File) {
const fileData = new FormData()
fileData.append("file", file)
setLoading(true)
const intervalId = setInterval(() => (rate < 100 && setRate(prev => prev + 1)), 40)
getTableData(fileData).then(({ code, data }) => {
if (code !== 0) return
const { point: points, "measure-items": tableData, "ruler-scaling": rulerScaling } = data
dispatch(changePointList(points))
dispatch(setTableData(tableData))
dispatch(setRulerScaling(rulerScaling))
sessionStorage.setItem("points", JSON.stringify(points))
sessionStorage.setItem("tableData", JSON.stringify(tableData))
sessionStorage.setItem("rulerScaling", JSON.stringify(rulerScaling))
setTimeout(() => setLoading(false), 500)
clearInterval(intervalId)
setRate(100)
})
}
}