better-prop-types
v1.1.1
Published
Better PropTypes.
Downloads
22
Readme
better-prop-types
better-prop-types is a wrapper for the original prop-types library adding a few more
validators and modifiers to accurately handle null
and undefined
values (which shouldn't be considered similar!).
The code is fully test-covered and actively used in production. It also provides accurate Typescript declarations.
The library includes the original prop-types
as a dependency.
And that's important to note that better-prop-types is only bundled as a full JavaScript module (ESM).
Features
- Add
.isOptionalButNotNull
and.isRequiredButNullable
modifiers to all validators, besides the original.isRequired
one:.isOptionalButNotNull
keeps the prop as optional (acceptingundefined
) but rejectsnull
values.isRequired
marks the prop as required but rejects bothnull
&undefined
values.isRequiredButNullable
marks the prop as required (rejectingundefined
) but acceptsnull
values
Usage
Installation
yarn add -E better-prop-types
or:
npm i -E better-prop-types
Example
import BetterPropTypes from 'better-prop-types'
export const MyComponent = ({
anOptionalButNonNullStringProp = 'A default string',
aRequiredAndNonNullableBooleanProp,
aRequiredButNullableNumberProp,
}) => (
// ...
)
MyComponent.propTypes = {
anOptionalButNonNullStringProp: BetterPropTypes.string.isOptionalButNotNull,
aRequiredAndNonNullableBooleanProp: BetterPropTypes.bool.isRequired,
aRequiredButNullableNumberProp: BetterPropTypes.number.isRequiredButNullable,
}
You can also use them with all the functional validators:
BetterPropsTypes.objectOf(/* */).isRequiredButNullable
BetterPropsTypes.shape(/* */).isOptionalButNotNull
- etc
Roadmap
- Integrate some prop-types-extra extra types:
all(...validators)
=>BetterPropsTypes.all(...validators)
deprecated(validator, reason)
=>BetterPropsTypes.isDeprecated(validator, reason)
isRequiredForA11y(validator)
=>BetterPropsTypes.string.isRequiredForA11y
- Improve original error messages for arrays validated via functional validators with explicit property naming.