immutable-prop-types v0.0.3
immutable-prop-types
PropType validators that work with Immutable.js. Forked from react-immutable-proptypes.
About
Usage is simple, they work with and like any PropType.* validator.
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'immutable-prop-types';
class MyReactComponent extends React.Component {
  // ...
}
MyReactComponent.propTypes = {
  myRequiredImmutableList: ImmutablePropTypes.listOf(
    ImmutablePropTypes.contains({
      someNumberProp: PropTypes.number.isRequired
    })
  ).isRequired
};Convenience helpers for "primitive" Immutable.js objects:
propTypes: {
  oldListTypeChecker: PropTypes.instanceOf(Immutable.List),
  anotherWay: ImmutablePropTypes.list,
  requiredList: ImmutablePropTypes.list.isRequired,
  mapsToo: ImmutablePropTypes.map,
  evenIterable: ImmutablePropTypes.iterable
}Installation
Installing via npmjs
npm install --save immutable-prop-typesAPI
Immutable prop types has:
- Primitive Types
 
ImmutablePropTypes.list         // Immutable.List.isList
ImmutablePropTypes.map          // Immutable.Map.isMap
ImmutablePropTypes.orderedMap   // Immutable.OrderedMap.isOrderedMap
ImmutablePropTypes.set          // Immutable.Set.isSet
ImmutablePropTypes.orderedSet   // Immutable.OrderedSet.isOrderedSet
ImmutablePropTypes.stack        // Immutable.Stack.isStack
ImmutablePropTypes.seq          // Immutable.Seq.isSeq
ImmutablePropTypes.iterable     // Immutable.Iterable.isIterable
ImmutablePropTypes.record       // instanceof Record
ImmutablePropTypes.contains     // Immutable.Iterable.isIterable - contains(shape)
ImmutablePropTypes.mapContains  // Immutable.Map.isMap - contains(shape)ImmutablePropTypes.contains(formerlyshape) is based onPropTypes.shapeand will try to work with anyImmutable.Iterable. In my usage it is the most used validator, as I'm often trying to validate that a map has certain properties with certain values.
// ...
aMap: ImmutablePropTypes.contains({
  aList: ImmutablePropTypes.contains({
    0: PropTypes.number,
    1: PropTypes.string,
    2: PropTypes.number.isRequired,
  }).isRequired,
})
// ...
<SomeComponent aList={Immutable.fromJS({aList: [1, 'two', 3]})} />ImmutablePropTypes.listOfis based onPropTypes.arrayand is specific toImmutable.List.ImmutablePropTypes.mapOfallows you to control both map values and keys (in Immutable.Map, keys could be anything including another Immutable collections). It accepts two arguments - first one for values, second one for keys (optional). If you are interested in validation of keys only, just passPropTypes.anyas the first argument.
// ...
aMap: ImmutablePropTypes.mapOf(
  PropTypes.any, // validation for values
  ImmutablePropTypes.mapContains({ // validation for keys
    a: PropTypes.number.isRequired,
    b: PropTypes.string
  })
)
// ...
const aMap = Immutable.Map([
  [Immutable.Map({a: 1, b: '2'}), 'foo'],
  [Immutable.Map({a: 3}), [1, '2', 3]]
]);
<SomeComponent aMap={aMap} />ImmutablePropTypes.orderedMapOfis basically the same asmapOf, but it is specific toImmutable.OrderedMap.ImmutablePropTypes.orderedSetOfis basically the same aslistOf, but it is specific toImmutable.OrderedSet.ImmutablePropTypes.stackOfis basically the same aslistOf, but it is specific toImmutable.Stack.ImmutablePropTypes.iterableOfis the generic form of listOf/mapOf. It is useful when there is no need to validate anything other than Immutable.js compatible (ie.Immutable.Iterable). Continue to uselistOfand/ormapOfwhen you know the type.ImmutablePropTypes.recordOfis likecontains, except it operates on Record properties.
// ...
aRecord: ImmutablePropTypes.recordOf({
  keyA: PropTypes.string,
  keyB: ImmutablePropTypes.list.isRequired
})
// ...ImmutablePropTypes.mapContainsis based onPropTypes.shapeand will only work withImmutable.Map.
// ...
aMap: ImmutablePropTypes.mapContains({
  aList: ImmutablePropTypes.list.isRequired,
})
// ...
<SomeComponent aList={Immutable.fromJS({aList: [1, 2]})} />These two validators cover the output of Immutable.fromJS on standard JSON data sources.