0.2.1 • Published 10 years ago

redux-tcomb v0.2.1

Weekly downloads
10
License
MIT
Repository
github
Last release
10 years ago

build status

Immutable and type-checked state and actions for Redux (built on tcomb library)

Example

import { createStore, applyMiddleware } from 'redux'
import t from 'tcomb'
import { createCheckedMiddleware, createCheckedReducer, createActionType } from 'redux-tcomb'
import createLogger from 'redux-logger'

// types
const State = t.Integer
const PositiveInteger = t.refinement(t.Integer, n => n >= 0, 'PositiveInteger')
const Action = createActionType({
  INCREMENT: t.interface({ delta: PositiveInteger }),
  DECREMENT: t.interface({ delta: PositiveInteger })
})

// reducer
function reducer(state = 0, action) {
  switch(action.type) {
    case 'INCREMENT' :
      return state + action.delta
    case 'DECREMENT' :
      return state - action.delta
  }
  return state
}

// configure
const store = createStore(
  createCheckedReducer(reducer, State),
  applyMiddleware(
    createCheckedMiddleware(Action),
    createLogger()
  )
)

// ok
store.dispatch({ type: 'INCREMENT', delta: 2 })
store.dispatch(Action.INCREMENT({ delta: 2 }))

// bad payload
store.dispatch({ type: 'INCREMENT', delta: -2 }) // throws [tcomb] Invalid value -2 supplied to Action(INCREMENT)/delta: PositiveInteger

// typo
store.dispatch({ type: 'INCRE', delta: 1 }) // throws [tcomb] Invalid value { "type": "INCRE", "delta": 1 } supplied to Action

API

type Reducer = (state: State, action: Action) => State;
  • createCheckedMiddleware(Action: Type) -> Function
  • createCheckedReducer(reducer: Reducer, State: Type) -> Reducer
  • createActionType(actions: {[key: string]: Type}) -> Type

License

The MIT License (MIT)

0.2.1

10 years ago

0.2.0

10 years ago

0.1.6

10 years ago

0.1.5

11 years ago

0.1.4

11 years ago

0.1.3

11 years ago

0.1.2

11 years ago

0.1.1

11 years ago

0.1.0

11 years ago