Что означает: interface GenerateMenuAndRoutesOptions { fetchMenuListAsync?: () => ...

interface GenerateMenuAndRoutesOptions {
  fetchMenuListAsync?: () => Promise<RouteRecordStringComponent[]>;
  forbiddenComponent?: RouteRecordRaw['component'];
  layoutMap?: ComponentRecordType;
  pageMap?: ComponentRecordType;
  roles?: string[];
  router: Router;
  routes: RouteRecordRaw[];
}

Это TypeScript-интерфейс, который описывает объект с настройками для функции (скорее всего generateAccessible).
Разберём что означает КАЖДАЯ строка и зачем это нужно 👇


Общий смысл

interface GenerateMenuAndRoutesOptions { ... }

👉 Это контракт:


Разбор по полям


🔹 fetchMenuListAsync?: () => Promise<RouteRecordStringComponent[]>;

📌 То есть:

fetchMenuListAsync: async () => {
  return getAllMenusApi()
}

👉 callback, который:


🔹 forbiddenComponent?: RouteRecordRaw['component'];

Это:

«возьми тип поля component из RouteRecordRaw»

Фактически:

Component | (() => Promise<Component>)

Используется как:


🔹 layoutMap?: ComponentRecordType;

Карта layout-компонентов:

{
  BasicLayout: BasicLayout,
  IFrameView: IFrameView,
}

Используется, чтобы:


🔹 pageMap?: ComponentRecordType;

Карта страниц:

import.meta.glob('../views/**/*.vue')

Используется, чтобы:


🔹 roles?: string[];

Массив ролей пользователя:

['admin', 'editor']

Используется для:


🔹 router: Router; ✅ (обязательное)

Экземпляр Vue Router:

const router = createRouter(...)

Используется для:


🔹 routes: RouteRecordRaw[]; ✅ (обязательное)

Массив базовых маршрутов:

[
  { path: '/login', component: Login },
  { path: '/404', component: NotFound }
]

Это:


Обязательные vs необязательные

Поле Обязательное
router
routes
fetchMenuListAsync
layoutMap
pageMap
roles
forbiddenComponent

Как это используется на практике

generateAccessible(mode, {
  router,
  routes,
  pageMap,
  layoutMap,
  fetchMenuListAsync,
})

TypeScript:


Коротко

Этот интерфейс описывает набор параметров,
которые нужны для генерации меню и маршрутов с доступами
(часто — динамически и с бэкенда).


Revision #2
Created 2026-01-20 09:06:36 UTC by Nikolay
Updated 2026-01-20 09:13:13 UTC by Nikolay