首页 > 解决方案 > 类型 'unknown' 不可分配给类型 '(prevState: number | undefined) => number | 不明确的'

问题描述

我正在使用材质 ui 的选择组件将所选值保存在变量中:

const [ratio, setRatio] = useState<number>();
...
const handleChangeRatio = (e: React.ChangeEvent<{ name?: string | undefined; value: unknown; }>) => {
    //const value = typeof e.target.value === "number" ? e.target.value : "";
    setRatio(e.target.value);
};
...
    <Select
        labelId="demo-simple-select-filled-label"
        id="demo-simple-select-filled"
        value={splittingMethod}
        onChange={(e)=>handleChangeRatio(e)}
    >
        <MenuItem value={0}>
            0
        </MenuItem>
        <MenuItem value={0.1}>0.1</MenuItem>
        <MenuItem value={0.2}>0.2</MenuItem>
    </Select>

但是,在 handleChange 函数中设置状态时出现此错误,我该如何解决?

Argument of type 'unknown' is not assignable to parameter of type 'SetStateAction<number | undefined>'.
  Type 'unknown' is not assignable to type '(prevState: number | undefined) => number | undefined'.

标签: javascriptreactjstypescriptreact-nativesetstate

解决方案


ReactuseState<number>()返回一个类型为: ratio: number | undefined,的值的元组setRatio: SeStateAction<number | undefined>。当您尝试提供setRatiotype 的值时unknown

最简单的方法是将类型缩小unknownnumber

const handleChangeRatio = (e: React.ChangeEvent<{ value: unknown }>) => {
    if (typeof e.target.value === 'number') setRatio(e.target.value)
};

或具有更好的运行时安全性:

const handleChangeRatio = (e: React.ChangeEvent<{ value: unknown }>) => {
    const value = Number(e.target.value)
    if (!isNaN(value)) setRatio(value)
};

推荐阅读