Skip to content

Справочник API

Типы времени выполнения

Все публичные типы экспортируются из корня пакета:

ts
import type {
  // Основной конфиг
  MachineConfig,
  StateConfig,
  TransitionConfig,
  SubMachineConfig,

  // Функции
  Guard,
  Action,

  // События
  EventObject,

  // Runtime
  MachineInstance,
  UseMachineOptions,
  TransitionRecord,
  MachineSnapshot,
  TransitionResult,

  // Wizard
  WizardStep,
  WizardOptions,
  WizardInstance,

  // Store
  MachineStoreAPI,

  // Утилиты
  Ctx,
} from '@macrulez/vue-state-machine'

TransitionResult также несёт поле contextPatch: Partial<TContext> — фактическую дельту, которую применил переход, вызванный действиями (в отличие от nextContext — полного результирующего контекста). Используется внутри для слияния изменений контекста параллельных регионов так, чтобы один регион не затирал нетронутые поля другого — см. Параллельные состояния.

Вывод дженериков

TypeScript выводит TState, TEvent и TContext из конфига, переданного в defineMachine. Аннотировать их вручную требуется редко:

ts
const machine = defineMachine({
  id: 'traffic',
  initial: 'red', // TS выводит TState = 'red' | 'green' | 'yellow'
  states: {
    red: { on: { NEXT: { target: 'green' } } }, // TEvent = 'NEXT'
    green: { on: { NEXT: { target: 'yellow' } } },
    yellow: { on: { NEXT: { target: 'red' } } },
  },
})

const { state } = useMachine(machine)
// state: Ref<'red' | 'green' | 'yellow'>
// send принимает только 'NEXT' — остальные строки — ошибка компиляции

Для сложных случаев можно аннотировать явно:

ts
const machine = defineMachine<
  'idle' | 'loading' | 'error' | 'success',
  'SUBMIT' | 'SUCCESS' | 'FAILURE' | 'RETRY',
  { attempts: number; error: string | null }
>({ ... })