如何指定在TypeScript中定义为对象文字的箭头函数的类型?

如何指定在TypeScript中定义为对象文字的箭头函数的类型?,typescript,vue-router,Typescript,Vue Router,我的目标如下: let route = { path: "/login", name: "login", component: Login, beforeEnter: (to, from, next) => { if (store.state.system.loggedIn) { next("/"); } else { next(); } }, } 这为Vue路由器指定路由

我的目标如下:

  let route = {
    path: "/login",
    name: "login",
    component: Login,
    beforeEnter: (to, from, next) => {
      if (store.state.system.loggedIn) {
        next("/");
      } else {
        next();
      }
    },
  }
这为Vue路由器指定路由对象。问题在于函数
beforenter
,因为我得到一个TS7006错误-所有参数都隐式地具有
任何类型

我可以手动指定参数类型,但是已经存在了
beforenter
函数应该适合的确切类型-它被称为
NavigationGuard
,我可以从
vue路由器导入它

当我试图指定它时,问题来了,我似乎找不到正确的语法。我发现了一个问题“”,其中一个答案建议要么指定整个对象的类型,要么像这样强制转换它:
{hasStarted:null,…}
但将定义替换为

let route = {
    path: "/login",
    name: "login",
    component: Login,
    beforeEnter: <NavigationGuard> (to, from, next) => {
      if (store.state.system.loggedIn) {
        next("/");
      } else {
        next();
      }
    },
  }
let route={
路径:“/login”,
名称:“登录”,
组件:登录,
beforeEnter:(到、从、下一个)=>{
if(store.state.system.loggedIn){
下一个(“/”);
}否则{
next();
}
},
}
似乎不能安抚编译器


怎么办?

为了避免与的混淆,您需要括号:

<NavigationGuard>((to, from, next) => {
  // …
})
但您应该能够在父对象上使用键入:

let route: RouteConfig = {
  path: "/login",
  name: "login",
  component: Login,
  beforeEnter: (to, from, next) => {
    if (store.state.system.loggedIn) {
      next("/");
    } else {
      next();
    }
  },
}
let route: RouteConfig = {
  path: "/login",
  name: "login",
  component: Login,
  beforeEnter: (to, from, next) => {
    if (store.state.system.loggedIn) {
      next("/");
    } else {
      next();
    }
  },
}