@ue-too/being / index / TemplateStateMachine
クラス: TemplateStateMachine<EventPayloadMapping, Context, States, EventOutputMapping>
定義: interface.ts:561
Concrete implementation of a finite state machine.
Remarks
This class provides a complete, ready-to-use state machine implementation. It's generic enough to handle most use cases without requiring custom extensions.
Features
- Type-safe events: Events and their payloads are fully typed via the EventPayloadMapping
- State transitions: Automatic state transitions based on event handlers
- Event outputs: Handlers can return values that are included in the result
- Lifecycle hooks: States can define
uponEnterandbeforeExitcallbacks - State change listeners: Subscribe to state transitions
- Shared context: All states access the same context object for persistent data
Usage Pattern
- Define your event payload mapping type
- Define your states as a string union type
- Create state classes extending TemplateState
- Instantiate TemplateStateMachine with your states and initial state
例
Basic vending machine state machine
type Events = {
insertCoin: { amount: number };
selectItem: { itemId: string };
cancel: {};
};
type States = "IDLE" | "PAYMENT" | "DISPENSING";
interface VendingContext extends BaseContext {
balance: number;
setup() { this.balance = 0; }
cleanup() {}
}
const context: VendingContext = {
balance: 0,
setup() { this.balance = 0; },
cleanup() {}
};
const machine = new TemplateStateMachine<Events, VendingContext, States>(
{
IDLE: new IdleState(),
PAYMENT: new PaymentState(),
DISPENSING: new DispensingState()
},
"IDLE",
context
);
// Trigger events
machine.happens("insertCoin", { amount: 100 });
machine.happens("selectItem", { itemId: "A1" });参照
- TemplateState for creating state implementations
- StateMachine for the interface definition
によって拡張された
型パラメーター
EventPayloadMapping
EventPayloadMapping
Object mapping event names to their payload types
Context
Context extends BaseContext
Context type shared across all states
States
States extends string = "IDLE"
Union of all possible state names (string literals)
EventOutputMapping
EventOutputMapping extends Partial<Record<keyof EventPayloadMapping, unknown>> = DefaultOutputMapping<EventPayloadMapping>
Optional mapping of events to their output types
実装
StateMachine<EventPayloadMapping,Context,States,EventOutputMapping>
コンストラクター
コンストラクター
new TemplateStateMachine<
EventPayloadMapping,Context,States,EventOutputMapping>(states,initialState,context,autoStart):TemplateStateMachine<EventPayloadMapping,Context,States,EventOutputMapping>
定義: interface.ts:592
パラメータ
states
Record<States, State<EventPayloadMapping, Context, States, EventOutputMapping>>
initialState
States
context
Context
autoStart
boolean = true
戻り値
TemplateStateMachine<EventPayloadMapping, Context, States, EventOutputMapping>
プロパティ
_context
protected_context:Context
定義: interface.ts:579
_currentState
protected_currentState:"INITIAL"|"TERMINAL"|States
定義: interface.ts:574
_happensCallbacks
protected_happensCallbacks: (args,context) =>void[]
定義: interface.ts:582
パラメータ
args
EventArgs<EventPayloadMapping, string> | EventArgs<EventPayloadMapping, keyof EventPayloadMapping>
context
Context
戻り値
void
_initialState
protected_initialState:States
定義: interface.ts:590
_stateChangeCallbacks
protected_stateChangeCallbacks:StateChangeCallback<States>[]
定義: interface.ts:581
_states
protected_states:Record<States,State<EventPayloadMapping,Context,States,EventOutputMapping>>
定義: interface.ts:575
_statesArray
protected_statesArray:States[]
定義: interface.ts:580
_timeouts
protected_timeouts:number|undefined=undefined
定義: interface.ts:589
アクセッサー
currentState
署名を取得する
get currentState():
"INITIAL"|"TERMINAL"|States
定義: interface.ts:723
戻り値
"INITIAL" | "TERMINAL" | States
の実装
possibleStates
署名を取得する
get possibleStates():
States[]
定義: interface.ts:731
戻り値
States[]
の実装
states
署名を取得する
get states():
Record<States,State<EventPayloadMapping,Context,States,EventOutputMapping>>
定義: interface.ts:735
戻り値
Record<States, State<EventPayloadMapping, Context, States, EventOutputMapping>>
の実装
メソッド
happens()
コールシグネチャ
happens<
K>(...args):EventResult<States,Kextends keyofEventOutputMapping?EventOutputMapping[K<K>] :void>
定義: interface.ts:653
型パラメーター
K
K extends string | number | symbol
パラメータ
args
...EventArgs<EventPayloadMapping, K>
戻り値
EventResult<States, K extends keyof EventOutputMapping ? EventOutputMapping[K<K>] : void>
の実装
コールシグネチャ
happens<
K>(...args):EventResult<States,unknown>
定義: interface.ts:659
型パラメーター
K
K extends string
パラメータ
args
...EventArgs<EventPayloadMapping, K>
戻り値
EventResult<States, unknown>
の実装
onHappens()
onHappens(
callback):void
定義: interface.ts:711
パラメータ
callback
(args, context) => void
戻り値
void
の実装
onStateChange()
onStateChange(
callback):void
定義: interface.ts:707
パラメータ
callback
StateChangeCallback<States>
戻り値
void
の実装
reset()
reset():
void
定義: interface.ts:613
戻り値
void
の実装
setContext()
setContext(
context):void
定義: interface.ts:727
パラメータ
context
Context
戻り値
void
の実装
start()
start():
void
定義: interface.ts:619
戻り値
void
の実装
switchTo()
switchTo(
state):void
定義: interface.ts:648
パラメータ
state
"INITIAL" | "TERMINAL" | States
戻り値
void
の実装
wrapup()
wrapup():
void
定義: interface.ts:632
戻り値
void