import * as PropTypes from 'prop-types'; import * as Immutable from 'immutable'; import * as ImmutablePropTypes from 'react-immutable-proptypes'; interface Props { list: Immutable.List; map: Immutable.Map; orderedMap: Immutable.OrderedMap; set: Immutable.Set; orderedSet: Immutable.OrderedSet; stack: Immutable.Stack; seq: Immutable.Seq; record: Immutable.Map; iterable: Immutable.Iterable; listOf: Immutable.List; mapOf: Immutable.Map; mapOfNoKey: Immutable.Map; orderedMapOf: Immutable.OrderedMap; orderedMapOfNoKey: Immutable.OrderedMap; setOf: Immutable.Set; orderedSetOf: Immutable.OrderedSet; stackOf: Immutable.Stack; iterableOf: Immutable.Iterable; recordOf: Immutable.Map; shape: Immutable.Iterable; contains: Immutable.Iterable; mapContains: Immutable.Map; } const propTypes: PropTypes.ValidationMap = { list: ImmutablePropTypes.list.isRequired, map: ImmutablePropTypes.map.isRequired, orderedMap: ImmutablePropTypes.orderedMap.isRequired, set: ImmutablePropTypes.set.isRequired, orderedSet: ImmutablePropTypes.orderedSet.isRequired, stack: ImmutablePropTypes.stack.isRequired, seq: ImmutablePropTypes.seq.isRequired, record: ImmutablePropTypes.record.isRequired, iterable: ImmutablePropTypes.iterable.isRequired, listOf: ImmutablePropTypes.listOf( PropTypes.string.isRequired ).isRequired, mapOf: ImmutablePropTypes.mapOf( PropTypes.number.isRequired, PropTypes.string.isRequired ).isRequired, mapOfNoKey: ImmutablePropTypes.mapOf( PropTypes.number.isRequired ).isRequired, orderedMapOf: ImmutablePropTypes.orderedMapOf( PropTypes.number.isRequired, PropTypes.string.isRequired ).isRequired, orderedMapOfNoKey: ImmutablePropTypes.orderedMapOf( PropTypes.number.isRequired ).isRequired, setOf: ImmutablePropTypes.setOf( PropTypes.string.isRequired ).isRequired, orderedSetOf: ImmutablePropTypes.orderedSetOf( PropTypes.string.isRequired ).isRequired, stackOf: ImmutablePropTypes.stackOf( PropTypes.string.isRequired ).isRequired, iterableOf: ImmutablePropTypes.iterableOf( PropTypes.string.isRequired ).isRequired, recordOf: ImmutablePropTypes.recordOf({ foo: PropTypes.string.isRequired, }).isRequired, shape: ImmutablePropTypes.shape({ foo: PropTypes.string.isRequired, }).isRequired, contains: ImmutablePropTypes.contains({ foo: PropTypes.string.isRequired, }).isRequired, mapContains: ImmutablePropTypes.mapContains({ foo: PropTypes.string.isRequired, }).isRequired, }; type ExtractedProps = PropTypes.InferProps; // $ExpectType true type ExtractPropsMatch = ExtractedProps extends Props ? true : false;