Как указать тип функции стрелки, определенной как литерал объекта в TypeScript? - PullRequest
2 голосов
/ 20 мая 2019

У меня есть следующий объект:

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

Указывает объект маршрута для Vue Router. Проблема с функцией beforeEnter, поскольку я получаю ошибку TS7006 - все параметры неявно имеют тип any.

Я мог бы указать типы параметров вручную, но уже существует точный тип, который должна соответствовать функции beforeEnter - он называется NavigationGuard, и я могу импортировать его из vue-router просто отлично.

Проблема возникает, когда я пытаюсь указать ее, я не могу найти правильный синтаксис. Я нашел вопрос " Определение типа в литерале объекта в TypeScript ", где в ответе предлагается либо указать тип всего объекта, либо привести его следующим образом: { hasStarted: <boolean> null, ... }, но заменить определение на

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

похоже не успокаивает компилятор.

Что делать?

1 Ответ

1 голос
/ 20 мая 2019

Чтобы избежать путаницы с генериками , вам необходимо заключить в скобки:

<NavigationGuard>((to, from, next) => {
  // …
})

Или:

((to, from, next) => {
  // …
}) as NavigationGuard

Но вы должны иметь возможность использовать набор текстана родительском объекте:

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