facebook / prop-types

Runtime type checking for React props and similar objects
MIT License
4.48k stars 358 forks source link

`oneOfType()` does not seem to allow all types specified #388

Open liamness opened 1 year ago

liamness commented 1 year ago

I am running into an issue where oneOfType() is passed in types of shape and string but is only allowing string seemingly.

Reproduced here (using a simplified version of types I have encountered on a project I am working on), https://jsfiddle.net/liamness/1du5jvwt/, with the warning:

Failed prop type: Invalid prop `schema[1]` supplied to `ComponentName`, expected one of type [string].

ljharb commented 1 year ago

The real issue is being masked here; it's that name: PropTypes.string.required, is invalid. It's .isRequired, not .required.

When I fix that, I correctly see no error.

I see the proper error message when I use just the shape - iow, oneOfType seems to be suppressing the actually helpful error message from shape, so that seems like a bug worth fixing.

liamness commented 1 year ago

You're right, that fixes the issue. I imagine what's happening is that incorrect arguments to oneOfType are being disregarded. Thanks!