Deviopath › TypeScript

Door State Machine

Medium · Records & Maps

A door can be "open", "closed" or "locked". It starts "closed". Allowed transitions:

- open + "close" -> closed

- closed + "open" -> open, closed + "lock" -> locked

- locked + "unlock" -> closed

Any other event is ignored (the state stays the same). Write runDoor(events: DoorEvent[]): DoorState[] that returns the state after each event.

Tip: store the transitions in a table of type Record<DoorState, Partial<Record<DoorEvent, DoorState>>>.

Next: Cart Reducer