跳转到内容

类型定义

State

export type State = string | MiddleState

FSM 的状态。稳定状态是字符串(如 'idle'FSM.INIT);中间过渡状态是 MiddleState 实例。

state.toString() 总是返回字符串形式:

  • 字符串状态:返回自身
  • MiddleState:返回 ${action}ing

IFSM

export interface IFSM extends FSM {}

FSM 的自引用接口。主要用于装饰器内部的类型签名(避免循环引用)。日常使用直接 extends FSM 即可。

ChangeOption

@ChangeState 的配置对象。

export interface ChangeOption {
ignoreError?: boolean
action?: string
success?: (result: any) => any
fail?: (err: FSMError) => any
context?: ((this: IFSM, ...args: any[]) => string | object) | string | object
abortAction?: string
sync?: boolean
}

ignoreError?: boolean

失败时不抛错,而是返回错误对象。

  • 异步模式:Promise.resolve(err)
  • 同步模式:直接 return err

默认 false

action?: string

自定义动作名。默认使用被装饰方法的方法名。中间态名 = action + 'ing'

success?: (result: any) => any

成功回调。this 指向被装饰方法所属实例。参数为原方法的返回值。

fail?: (err: FSMError) => any

失败回调。this 指向实例。参数为 FSMError

context?: string | object | ((this, ...args) => string | object)

组合模式:把状态变更委托给另一个与 context 关联的 FSM(通过 FSM.get(context) 获取或创建)。

  • 字符串:FSM.get('timer')
  • 对象:FSM.get(obj)(用 WeakMap
  • 函数:this.context.call(this, ...args) 返回字符串或对象

详见组合式状态机

abortAction?: string

如果当前正处在中间态,且该中间态的 action 等于 abortAction,调用此方法会调用 middle.abort(fsm) 中断它。

详见中断与 abort

sync?: boolean

同步模式。详见同步模式

  • true:方法返回同步值时直接返回(不包 Promise);错误抛出而非 reject
  • false(默认):始终返回 Promise

FSMEventTypes

interface FSMEventTypes {
stateChanged: [State, State, any]
}

stateChanged 事件的参数类型:[newState, oldState, err?]。通过 FSM<MyEvents> 泛型可扩展自定义事件类型。

参见