获取API响应后解析失败,TypeScript无法读取字段求助
问题解决:无法读取API返回的权限字段
你的核心问题是把已经是JavaScript对象的permissions转成了JSON字符串,导致没法直接访问对象属性。你从useUMSStoreContext拿到的permissions应该已经是解析好的数组(对应API返回里的permissions数组),但JSON.stringify(permissions)把它变成了字符串,字符串自然没有name或permission_type这些属性。
解决步骤:
直接操作原数组,不要转成JSON字符串
去掉多余的JSON.stringify,直接使用permissions数组:const { states: { permissions } }: any = useUMSStoreContext(); // 遍历所有权限,打印name和permission_type permissions.forEach(perm => { console.log('权限名称:', perm.name, '权限类型:', perm.permission_type); }); // 获取单个权限的属性 if (permissions.length > 0) { console.log('第一个权限:', permissions[0].name, permissions[0].permission_type); }给TypeScript添加类型定义(推荐)
避免使用any,定义对应类型能获得代码提示,同时更安全:// 定义单个权限的类型 interface Permission { id: number; product_id: number; permission_type: 'ADD' | 'UPDATE' | 'DELETE'; name: string; } // 定义store上下文的类型 interface UMSStoreContext { states: { permissions: Permission[]; // 其他store属性... }; // 其他store方法... } // 使用类型代替any const { states: { permissions } } = useUMSStoreContext() as UMSStoreContext; // 现在可以安全访问属性,TypeScript会自动提示 permissions.forEach(perm => { console.log(perm.name, perm.permission_type); });特殊情况:如果
permissions确实是未解析的JSON字符串
若store中存储的是原始JSON字符串,需要先解析成对象数组:const { states: { permissions } }: any = useUMSStoreContext(); // 解析字符串为对象数组 const permissionList = JSON.parse(permissions) as Permission[]; // 再访问属性 permissionList.forEach(perm => { console.log(perm.name, perm.permission_type); });
内容的提问来源于stack exchange,提问作者kah
相关产品推荐
相关产品推荐

