如何将Redux状态存localStorage的函数转为TS强类型并修复类型报错?
解决方案
1. 定义状态结构类型
先明确Redux状态的具体结构,用TypeScript接口替代any:
// 根据你的实际Redux状态字段补充这个接口 interface AmazonYTState { // 示例字段,替换成你真实的状态属性 watchHistory: string[]; favoriteVideos: Record<string, boolean>; }
2. 修正函数实现并实现强类型
修改原函数,处理localStorage.getItem返回null的类型问题,同时保证类型安全:
export const saveStateToLocalStorage = (state: Partial<AmazonYTState>) => { // 当localStorage中无对应数据时,用空对象的JSON字符串作为默认值 const storedRawData = localStorage.getItem('amazonYT') ?? '{}'; // 解析数据并指定类型 let amazonYT: AmazonYTState = JSON.parse(storedRawData); // 合并新旧状态,类型检查确保字段合法 amazonYT = { ...amazonYT, ...state }; localStorage.setItem('amazonYT', JSON.stringify(amazonYT)); };
关键说明
- 类型定义:
AmazonYTState接口明确了状态的结构,彻底替代any,让TypeScript能在编译阶段检查状态操作的合法性。 - 解决
null类型报错:使用空值合并运算符??,当getItem返回null时,自动替换为'{}',确保传给JSON.parse的参数始终是合法字符串,消除类型不匹配的报错。 - Partial类型:参数使用
Partial<AmazonYTState>,允许传入状态的部分字段,符合Redux中局部更新状态的常见场景,同时保证传入的字段都属于状态结构内的合法属性。
内容的提问来源于stack exchange,提问作者koque
相关产品推荐
相关产品推荐

