@ue-too/being / index / TemplateState
抽象 類別: TemplateState<EventPayloadMapping, Context, States, EventOutputMapping>
定義於: interface.ts:826
Abstract base class for state machine states.
備註
This abstract class provides the foundation for implementing individual states in a state machine. Each state defines how it responds to events through the eventReactions object.
Key Concepts
- Event Reactions: Define handlers for events this state cares about. Unhandled events are ignored.
- Guards: Conditional logic that determines which state to transition to based on context
- Lifecycle Hooks:
uponEnterandbeforeExitcallbacks for state transition side effects - Selective Handling: Only define reactions for events relevant to this state
Implementation Pattern
- Extend this class for each state in your state machine
- Implement the
eventReactionsproperty with handlers for relevant events - Optionally override
uponEnterandbeforeExitfor lifecycle logic - Optionally define
guardsandeventGuardsfor conditional transitions
Examples
Simple state implementation
class IdleState extends TemplateState<MyEvents, MyContext, MyStates> {
eventReactions = {
start: {
action: (context, event) => {
console.log('Starting...');
context.startTime = Date.now();
},
defaultTargetState: "ACTIVE"
},
reset: {
action: (context, event) => {
context.counter = 0;
}
// No state transition - stays in IDLE
}
};
uponEnter(context, stateMachine, fromState) {
console.log(`Entered IDLE from ${fromState}`);
}
}State with guards for conditional transitions
class PaymentState extends TemplateState<Events, VendingContext, States> {
guards = {
hasEnoughMoney: (context) => context.balance >= context.itemPrice,
needsChange: (context) => context.balance > context.itemPrice
};
eventReactions = {
selectItem: {
action: (context, event) => {
context.selectedItem = event.itemId;
context.itemPrice = getPrice(event.itemId);
},
defaultTargetState: "IDLE" // Fallback if no guard matches
}
};
eventGuards = {
selectItem: [
{ guard: 'hasEnoughMoney', target: 'DISPENSING' },
// If hasEnoughMoney is false, uses defaultTargetState (IDLE)
]
};
}參閱
- TemplateStateMachine for the state machine implementation
- EventReactions for defining event handlers
Extended by
型別參數
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
實作
State<EventPayloadMapping,Context,States,EventOutputMapping>
建構函式
建構函式
new TemplateState<
EventPayloadMapping,Context,States,EventOutputMapping>():TemplateState<EventPayloadMapping,Context,States,EventOutputMapping>
回傳
TemplateState<EventPayloadMapping, Context, States, EventOutputMapping>
屬性
_defer
protected_defer:Defer<Context,EventPayloadMapping,States,EventOutputMapping> |undefined=undefined
定義於: interface.ts:855
_delay
protected_delay:Delay<Context,EventPayloadMapping,States,EventOutputMapping> |undefined=undefined
定義於: interface.ts:851
_eventGuards
protected_eventGuards:Partial<EventGuards<EventPayloadMapping,States,Context,Guard<Context>>>
定義於: interface.ts:846
_eventReactions
protected_eventReactions:EventReactions<EventPayloadMapping,Context,States,EventOutputMapping>
定義於: interface.ts:834
_guards
protected_guards:Guard<Context>
定義於: interface.ts:845
存取器
delay
Getter 簽章
get delay():
Delay<Context,EventPayloadMapping,States,EventOutputMapping> |undefined
定義於: interface.ts:884
回傳
Delay<Context, EventPayloadMapping, States, EventOutputMapping> | undefined
實作了
eventGuards
Getter 簽章
get eventGuards():
Partial<EventGuards<EventPayloadMapping,States,Context,Guard<Context>>>
定義於: interface.ts:869
回傳
Partial<EventGuards<EventPayloadMapping, States, Context, Guard<Context>>>
實作了
eventReactions
Getter 簽章
get eventReactions():
EventReactions<EventPayloadMapping,Context,States,EventOutputMapping>
定義於: interface.ts:875
回傳
EventReactions<EventPayloadMapping, Context, States, EventOutputMapping>
實作了
guards
Getter 簽章
get guards():
Guard<Context>
定義於: interface.ts:865
回傳
Guard<Context>
實作了
handlingEvents
Getter 簽章
get handlingEvents(): keyof
EventPayloadMapping[]
定義於: interface.ts:859
回傳
keyof EventPayloadMapping[]
方法
beforeExit()
beforeExit(
context,stateMachine,to):void
定義於: interface.ts:903
參數
context
Context
stateMachine
StateMachine<EventPayloadMapping, Context, States, EventOutputMapping>
to
"TERMINAL" | States
回傳
void
實作了
handles()
handles<
K>(args,context,stateMachine):EventResult<States,Kextends keyofEventOutputMapping?EventOutputMapping[K<K>] :void>
定義於: interface.ts:916
型別參數
K
K extends string | number | symbol
參數
args
EventArgs<EventPayloadMapping, K>
context
Context
stateMachine
StateMachine<EventPayloadMapping, Context, States, EventOutputMapping>
回傳
EventResult<States, K extends keyof EventOutputMapping ? EventOutputMapping[K<K>] : void>
實作了
uponEnter()
uponEnter(
context,stateMachine,from):void
定義於: interface.ts:890
參數
context
Context
stateMachine
StateMachine<EventPayloadMapping, Context, States, EventOutputMapping>
from
"INITIAL" | States
回傳
void