ts(2345)类型'any'的参数不能分配给'never'类型的参数

时间:2020-06-10 22:15:03

标签: reactjs typescript

const [files, setFiles] = useState([])
const handleChange = (event: any) => {
    setFiles.push(event.target.files[0].name)

    return (<div>
        {files.map((file: any) => (
            <p>Hello!</p>
        ))}
        </div>)

}

单击按钮时,我试图将一个值推入我的状态,然后在我的状态中映射以呈现p个元素,但是我遇到错误“类型为'any'的参数不能分配给类型的参数尝试推送到setFiles时显示'never'.ts(2345)“。

2 个答案:

答案 0 :(得分:0)

您还需要使用any转换到文件状态:

const [files, setFiles] = useState([] as any)

此外,这一行代码是错误的:

setFiles.push(event.target.files[0].name)

setFiles是您所知道的功能。

您应该使用:

setFiles(files.push(event.target.files[0].name))

但是反应状态是不可变的。因此,您可以使用传播运算符,例如:

setFiles([...files, event.target.files[0].name])

答案 1 :(得分:0)

由于反应状态是不变的,因此.push()函数将不起作用,因此可以使用.concat()或散布运算符。

为了避免不必要的副作用,您必须将组合数组逻辑与回调一起包装。

setFiles(oldArray => [...oldArray, event.target.files[0].name])

setFiles(oldArray => oldArray.concat(event.target.files[0].name))