快速上手
安装
npm install afsm# 或pnpm add afsm# 或yarn add afsmAFSM 依赖 eventemitter3 和 TypeScript 实验性装饰器。
配置 tsconfig
AFSM 使用 TC39 stage 2 的装饰器提案,需要在 tsconfig.json 中开启:
{ "compilerOptions": { "experimentalDecorators": true, "useDefineForClassFields": false, "target": "ES2017" }}注意:
useDefineForClassFields必须为false(或保持默认未开启),否则会破坏装饰器语义。
第一个状态机
import { FSM, ChangeState } from 'afsm'
class MyFSM extends FSM { @ChangeState(FSM.INIT, 'state1') async gotoState1() {}
@ChangeState('state1', 'state2') async gotoState2() {}}
const obj = new MyFSM()obj.gotoState2() // 抛错:当前是 [*],不满足 from='state1'await obj.gotoState1() // 状态变为 state1await obj.gotoState2() // 状态变为 state2监听状态变化
obj.on(FSM.STATECHANGED, (newState, oldState) => { console.log(`${oldState} → ${newState}`)})也可以监听特定状态或中间态:
obj.on('state1', () => console.log('到达 state1'))obj.on('gotoState2ing', () => console.log('正在前往 state2'))查看状态图
每个 FSM 实例都有一个 stateDiagram getter,自动生成 mermaid stateDiagram-v2 语法:
console.log(obj.stateDiagram.join('\n'))// [*] --> gotoState1ing : gotoState1// gotoState1ing --> state1 : gotoState1 🟢// gotoState1ing --> [*] : gotoState1 🔴// ...在线试一试
下面是「红绿灯」示例,可以调参后点运行:
下一步
- 核心概念 — 深入了解 FSM 类、State、MiddleState
- @ChangeState — 状态迁移装饰器详解
- 事件系统 — 监听状态变化
- DevTools 扩展 — 安装 Chrome / Edge 面板,实时观察状态机