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

Vue+Quasar路由传参报错:RouteLocationRaw类型不匹配求助

解决Vue Router路由跳转参数传递的TypeScript类型不匹配问题

1. 修正路由配置

先确保目标路由ROUTE_NAME.HOME_NEWSETTINGS的定义符合TypeScript要求。如果要传递自定义数据,推荐开启props模式,比直接用params更安全且类型友好:

// 路由配置文件(如router/index.ts)
const routes = [
  // ...其他路由
  {
    path: '/new-settings',
    name: ROUTE_NAME.HOME_NEWSETTINGS,
    component: () => import('@/pages/settings.vue'),
    // 开启props模式,将传递的参数转为组件props
    props: route => ({ ...route.params })
  }
];

2. 调整Admin.vue的跳转代码

给传递的数据指定明确类型,确保和目标路由的参数结构匹配,避免TypeScript类型校验报错:

// Admin.vue中修正后的跳转函数
const EditWorkSetting = (data: INewSettingsForm) => {
  router.push({
    name: ROUTE_NAME.HOME_NEWSETTINGS,
    params: data
  });
};

3. 在settings.vue中正确接收参数

注意使用useRoute()获取当前路由信息(useRouter仅用于跳转),并在onMounted中读取参数:

// settings.vue脚本部分
<script setup lang="ts">
import { useRoute, useRouter } from "vue-router";
import { reactive, ref, onMounted } from "vue";
import http from "@/plugins/axios";
import { qSelectBase, INewSettingsForm } from "../../interfaces/pages/welcome";
import { ROUTE_NAME } from "@/router/Types";
import { Notify } from "quasar";

const step = ref(1);
const router = useRouter();
const route = useRoute(); // 获取当前路由实例

onMounted(() => {
  // 读取传递的参数
  const receivedData = route.params as INewSettingsForm;
  // 后续可使用receivedData做业务处理
});

// other const declarations
</script>

错误原因说明

出现类型不匹配的核心是:传递的params结构未与Vue Router的RouteLocationRaw类型对齐。TypeScript要求路由跳转参数必须符合预定义类型,通过给数据指定明确类型(如INewSettingsForm)、配合路由配置的props模式,即可解决该类型冲突。

内容的提问来源于stack exchange,提问作者Mira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:36