这段代码的问题在于 menuRoutes
属性的类型定义与实际赋值不符合,导致了类型错误。
根据报错信息,UserState.menuRoutes
的类型应该是一个数组,其中元素类型为 RouteRecordRaw
。而实际上我们将常量路由数组 constantRoute
直接赋值给了 menuRoutes
属性,因此 TypeScript 推断出 menuRoutes
的类型为 (typeof constantRoute)[]
,即包含多个对象的数组。
要解决这个问题,可以将 UserState.menuRoutes
的类型改为 [RouteRecordRaw]
(注意方括号的位置),表示只包含一个元素的数组,并且该元素是一个 RouteRecordRaw
类型对象。修改后的代码如下:
import { defineStore } from "pinia";
import { reqLogin } from '@/api/user';
import type { LoginForm, loginResponseData } from "@/api/user/type";
import type { UserState } from "./type/type";
// 引入本地存储文件
import { SET_TOKEN, GET_TOKEN } from "@/utils/token";
// 引入路由(常量路由)
import { constantRoute } from "@/router/routes";
let useUserStore = defineStore('User', {
// 小仓库 存储数据的地方
state: (): UserState => {
return {
token: GET_TOKEN(),//用户唯一标识
menuRoutes: [constantRoute], // 修改此处
}
},
actions: {
async login(loginForm: LoginForm): Promise<boolean> {
const res = await reqLogin(loginForm)
if (res.code === 200) {
// 登录成功,将 token 存入本地存储
SET_TOKEN(res.data.token)
// 将 token 存入 store
this.token = res.data.token
return true
} else {
return false
}
}
},
})
export default useUserStore;