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

Vue3+TypeScript中使用includes判断权限时类型错误的解决咨询

解决Vue3+TS权限菜单中的TypeScript类型错误

你的错误根源有两个:

  • pages数组中role字段类型不统一:有的是number[](比如Dashboard的[0,1]),有的是string(Login的'admin'),TypeScript自动推断role的类型为string | number[],导致includes方法的参数类型被推断为never(字符串的includes接受string,数组的includes接受number,两者没有共同类型)。
  • isAdmin是number | undefined类型,存在未定义的可能性,无法匹配includes的参数要求。

解决方案

1. 统一role字段类型

把所有role改成统一的number[]类型,根据业务逻辑调整权限数值:

const pages = [
  {
    name: 'Dashboard',
    icon: HomeIcon,
    to: '',
    role: [0,1]
  },
  {
    name: 'Quản lý người dùng',
    icon: MenuIcon,
    to: 'user',
    role: [1]
  },
  {
    name: 'Quản lý File',
    icon: FolderIcon ,
    to: 'files',
    role: [0,1]
  },
  {
    name: 'AWS 3 STORAGE',
    icon: FolderOpenIcon ,
    to: 'aws3',
    role: [1]
  },
  // 修改Login项的role为数值数组
  {
    name: 'Login',
    icon: CollectionIcon,
    to: 'login',
    role: [0,1] // 根据实际权限设置对应的数值
  },
  {
    name: 'Config',
    icon: AdjustmentsIcon,
    to: 'config',
    role: [1]
  }
]

2. 处理isAdmin的undefined问题

给isAdmin设置默认值,避免未定义状态:

// 初始化时设置默认值,比如默认非管理员(0)
const isAdmin = ref<number>(0)

// 从localStorage取值时做兜底处理
const checkUser = JSON.parse(localStorage.getItem('user')||'{"is_admin": 0}')
isAdmin.value = checkUser.is_admin ?? 0 // 空值合并运算符确保不会是undefined

3. (可选)给pages定义明确的类型

添加接口约束,让TypeScript提供更严格的类型检查:

import type { Component } from 'vue'

interface Page {
  name: string
  icon: Component
  to: string
  role: number[]
}

const pages: Page[] = [
  // 页面配置项
]

4. 模板中的判断逻辑

类型统一后,原模板的v-if即可正常运行:

<router-link 
  exact-active-class="bg-purple-400 text-white" 
  v-if="page.role.includes(isAdmin)"
  class="inline-flex items-center w-full text-sm font-semibold transition duration-200 ease-in hover:bg-purple-500 hover:text-white  py-2 px-2 rounded-lg "
  :to="`/${page.to}`">
  <component :is="page.icon" class="flex-shrink-0 h-6 w-6" aria-hidden="true" />
  <span class="ml-4">{{ page.name }}</span>            
</router-link>

内容的提问来源于stack exchange,提问作者Nguyễn Thế Hưng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:35