使用useState遇类型错误:MyInterface[]无法分配给SetStateAction参数
解决TypeScript类型不匹配错误:MyInterface[] 无法赋值给 SetStateAction<MyInterface | null>
问题原因
你定义的selection状态类型是MyInterface | null(单个对象或空值),但尝试传入的defaultValue是MyInterface[]类型(对象数组),两者类型不兼容,导致TypeScript抛出类型错误。
解决方案
根据业务需求选择以下任意一种处理方式:
1. 仅需要存储单个对象(保持原state类型)
如果selection的设计就是存储单个MyInterface对象或null,从defaultValue数组中取目标元素赋值即可,比如取第一个元素:
useEffect(() => { // 数组为空时自动设为null setSelection(defaultValue[0] || null); }, [defaultValue]);
2. 需要存储对象数组(修改state类型)
如果selection本来就应该存储多个对象,直接修改state的类型定义为数组类型:
// 允许数组或null const [selection, setSelection] = useState<MyInterface[] | null>(null); // 或者默认值设为空数组(更常见) const [selection, setSelection] = useState<MyInterface[]>([]);
之后就可以直接赋值:
useEffect(() => { setSelection(defaultValue); }, [defaultValue]);
内容的提问来源于stack exchange,提问作者programmerGuy
相关产品推荐
相关产品推荐

