带有 Typescript 的 Vue3 路由器:缺少 RouteConfig

Posted

技术标签:

【中文标题】带有 Typescript 的 Vue3 路由器:缺少 RouteConfig【英文标题】:Vue3 Router with Typescript: missing RouteConfig 【发布时间】:2020-10-07 19:20:37 【问题描述】:

我从@vue/cli $> vue create my-project创建了一个新的vue项目,激活了Typescript选项和路由器选项,并使用$>vue add vue-next升级到vue3 beta。

现在,$>npm run serve 失败并显示

ERROR in /home/auser/dev/my-project/src/router/index.ts(1,10):
1:10 Module '"../../node_modules/vue-router/dist/vue-router"' has no exported member 'RouteConfig'.

  > 1 | import  RouteConfig, createRouter, createWebHistory  from 'vue-router';
      |          ^
    2 | import Home from '../views/Home.vue'

整个文件没那么长,后面会用到RouteConfig:

//index.ts
import  RouteConfig, createRouter, createWebHistory  from 'vue-router';
import Home from '../views/Home.vue'

const routes: Array<RouteConfig> = [

  path: '/',
  name: 'Home',
  component: Home
,

  path: '/about',
  name: 'About',
  // route level code-splitting
  // this generates a separate chunk (about.[hash].js) for this route
  // which is lazy-loaded when the route is visited.
  component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')

]

const router = createRouter(
  history: createWebHistory(process.env.BASE_URL),
  routes
)

export default router

:什么是正确的RouteConfig类型,我需要createRouter

【问题讨论】:

【参考方案1】:

你可以这样使用。

import type  RouteRecordRaw  from 'vue-router';

const router = createRouter(
  history: createWebHashHistory(),
  routes: basicRoutes as RouteRecordRaw[]
);

【讨论】:

谢谢!那么component: Home as XYZ 的类型是什么?【参考方案2】:

(由于这是预发布:我使用的是 vue-router@4.0.0-alpha.13。)

我遇到了同样的事情。根据 view-router.d.ts,路由数组的正确类型是 RouteRecordRawRouteConfig 用于 createRouter 参数本身。

但是,如果我将数组键入为RouteRecordRaw,那么我遇到了RouteRecordRaw 定义的问题,该定义由其他几种看起来像未导出的类型组成,因此键入数组导致的问题多于它解决的问题。

我怀疑会出现更好的模式,但目前我将路由数组键入为any,这可行。

【讨论】:

谢谢,这解决了问题。但是我一直遇到 vue3 + ts 的问题,所以我切换回 vue2(也许是 ts,让我们看看) @Moritz 昨天是我第一次能够编译 TS 和 Vue3+Router 项目,但还处于早期阶段。我知道 Evan You 谈了很多关于 Vue3 比 Vue2 更好地支持 TS,所以我相信它会变得更容易。 太棒了!我希望 vue3 的开箱即用支持会变得更好。现在,我切换回 vue2,最终因为我的 vue3 设置不支持 &lt;input type="list" ... 存在另一个问题 - 我正处于学习 vue 和 TS 的阶段,所以这就是我要走的路。跨度>

以上是关于带有 Typescript 的 Vue3 路由器:缺少 RouteConfig的主要内容,如果未能解决你的问题,请参考以下文章

vue3+typescript+vantUi 实现一个带有搜索功能的 picker选择器

vue3+typescript+vantUi 实现一个带有搜索功能的 picker选择器

在带有路由器视图的 Vue3 中使用异步设置()时我得到了空白

Vue3js路由器链接到带有基于标头的偏移值的散列

搭建vue3+typescript+vite+yarn项目

带有 typescript 的 React 路由器 v5 上所需的 url 参数,可以是未定义的