TypeScript中useState初始化状态遇TS2345错误求助
问题原因及解决方法
错误核心
你给useState声明的类型是Array<Approval>(等价于Approval[]),但初始化时传入的是空对象{}——对象类型和数组类型不匹配,这就是触发TypeScript报错的直接原因。
报错信息解读
TypeScript的报错已经明确指出:{}无法赋值给Approval[] | (() => Approval[])类型。因为你声明的状态只能是Approval类型的数组,或者返回该数组的初始化函数,而空对象既不是数组,也不是符合要求的函数,自然通不过类型检查。
正确写法
根据业务需求,选择以下两种初始化方式:
- 初始状态为空数组(最常用,适合列表类数据初始为空的场景):
const [approvals, setApprovals] = useState<Approval[]>([]);
- 初始状态为未定义(适合数据还没加载的场景,需要后续赋值):
const [approvals, setApprovals] = useState<Approval[] | undefined>(undefined);
总结
TypeScript对类型匹配要求严格,数组类型的状态必须用数组格式初始化,不能用对象。只要把初始值从{}改成[](或符合类型要求的其他值),报错就会消失。
内容的提问来源于stack exchange,提问作者JarochoEngineer
相关产品推荐
相关产品推荐

