typescript - “Vue”类型上不存在属性“$keycloak”
问题描述
我的 Vue.js 路由器代码中出现以下错误(请参见下面的代码段):
Property '$keycloak' does not exist on type 'Vue'
问题是我的代码可以编译并且可以工作,但是当我尝试控制台日志时,router.app
我看不到该属性$keycloak
。
我是 Vue.js 的初学者。
谢谢你的帮助。
import VueRouter, { RouteConfig } from "vue-router";
import Home from "../views/Home.vue";
import About from "../views/About.vue";
const routes: Array<RouteConfig> = [
{
path: "/",
name: "Home",
component: Home,
meta: {
isAuthenticated: false,
},
},
{
path: "/about",
name: "About",
component: About,
meta: {
requiresAuth: true,
},
},
];
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes,
});
router.beforeEach((to, from, next) => {
console.log(router.app);
console.log(router.app.$keycloak);
if (to.matched.some((record) => record.meta.requiresAuth)) {
if (router.app.$keycloak.authenticated) {
next();
} else {
const loginUrl = router.app.$keycloak.createLoginUrl();
window.location.replace(loginUrl);
}
} else {
next();
}
});
export default router;
解决方案
这很可能是由于$keycloak
没有在Vue
类上定义属性。你可以通过使用来解决这个问题(router.app as any).$keycloak...
,但是这不是类型安全的,通常不推荐。您还可以注册$keycloak
为 Vue 插件 - 查看这篇文章以获取有关插件的更多信息。
是否$keycloak
需要在 Vue 实例上定义,或者有其他方法可以实现吗?
推荐阅读
- c++ - linux sockets cpp recv() - 无法通过http接收完全数据
- node.js - docker-compose up --build 找不到模块
- reactjs - 为什么在为显示属性等类属性调用 setState 时会出错?
- flutter - 小部件可以有一个“联合”状态吗?
- reactjs - 在单击跨度时,我们如何使用 useRef() 获取正确的跨度名称
- batch-file - 在批处理脚本中替换特殊符号
- python-3.x - 如何在 Python 中接受带有 Selenium 的 cookie 弹出窗口
- amazon-web-services - AWS S3 访问策略 - 限制文件夹访问
- web3 - 转账ERC20代币失败:web3.exceptions.ContractLogicError:执行恢复:ERC20:从零地址转账
- javascript - Stripe - 退款结账环节