【问题标题】:Vue3 Router with Typescript: missing RouteConfig带有 Typescript 的 Vue3 路由器:缺少 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

【问题讨论】:

    标签: typescript vue.js vue-router vuejs3


    【解决方案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 的阶段,所以这就是我要走的路。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2014-02-06
    • 2019-12-14
    • 1970-01-01
    • 2020-04-30
    • 2016-06-25
    相关资源
    最近更新 更多