You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取API响应后解析失败,TypeScript无法读取字段求助

问题解决:无法读取API返回的权限字段

你的核心问题是把已经是JavaScript对象的permissions转成了JSON字符串,导致没法直接访问对象属性。你从useUMSStoreContext拿到的permissions应该已经是解析好的数组(对应API返回里的permissions数组),但JSON.stringify(permissions)把它变成了字符串,字符串自然没有name或permission_type这些属性。

解决步骤:

  1. 直接操作原数组,不要转成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);
    }
    
  2. 给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);
    });
    
  3. 特殊情况:如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:30:48