Это не удобно, но можно написать собственный PropType.
от React источника (который он, к сожалению, не разоблачить в данный момент):
function createChainableTypeChecker(validate) {
function checkType(isRequired, props, propName, componentName, location, propFullName) {
componentName = componentName || ANONYMOUS;
propFullName = propFullName || propName;
if (props[propName] == null) {
var locationName = ReactPropTypeLocationNames[location];
if (isRequired) {
return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
}
return null;
} else {
return validate(props, propName, componentName, location, propFullName);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
, который можно использовать как так:
const map = createChainableTypeChecker(function(props, propName, componentName, location, propFullName) {
if (...) {
return null; // pass the check
}
return new Error('Error message'); // fail the check
});
А как указать массив из них, например, или PropTypes.Shape с этим proptype внутри? –
Храните эту функцию как переменную (например, 'MyPropTypes.mapRequired') и просто используйте' MyPropTypes.mapRequired', где бы вы ни использовали другой тип prop, например 'PropType.string'. – Brandon