使用TS进行Vue-Router的Meta类型扩展-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

1、前言

使用Vue-Router时会将一些字段信息附加到路由的Meta对象里面比如图标icon标题权限等如下

{
  path: '/billboard/board/:boardId',
  name: 'billboardBoard',
  props: true,
  component: () => import('@/views/billboard/board.vue'),
  meta: {
    title: 'message.router.billboard',
    isHide: true,
    isKeepAlive: false,
    isAffix: false,
    isIframe: false,
    icon: 'iconfont icon-board'
  }
}

但是在使用的过程中TS会认为这些字段是unknown类型从而导致赋值或者使用的时候会报错

router.beforeEach((to) => {
	document.title = to.meta.title || '默认标题'
})

如图
报错

2、解决

为了避免报错和标红虽然不影响程序运行我们可以通过扩展RouteMeta接口声明Meta的字段这样在使用过程中不仅不会报错标红还会有代码提示方法如下

  • 在根目录或者types目录下新建一个router-meta.d.ts文件文件内容如下
/**
 * @description 扩展ruoter-meta的类型 此处必须要export {} 不然找不到类型
 */
declare module 'vue-router' {
	interface RouteMeta {
		permission?: Array<string>
		title?: string
		icon?: string
		affix?: boolean
		hidden?: boolean
		keepAlive?: boolean
	}
}

export {}
  • 在根目录tsconfig.json的include选项中能够包含到这个文件即可。
{
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "types/**/*.d.ts", "types/**/*.ts"],
  "exclude": ["node_modules/**", "dist", "**/*.js"]
}

如图提示


本次分享就到这儿啦我是鹏多多如果您看了觉得有帮助欢迎评论关注点赞转发我们下次见~

往期文章

个人主页

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: vue