ts创建一个Input,添加事件监听器,函数类型报错?

ts创建一个Input,添加事件监听器,函数类型报错?

image.png


    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: InputEvent) {
            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)
            })
        }
    }
阅读 760
avatarAI BotBETA

这段代码中的错误出现在事件监听器的参数类型上。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)
        })
    }
}
1 个回答
  input.addEventListener("input", (e: Event) => {
    const target = (e.target as HTMLInputElement);
  })
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏