fix(react): unions in prop types are not resolved #844
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Suppose I have:
The idea is to have an extra guard where you can only pass
spacing
as a prop whencontainer
istrue
. But unfortunately the current typing doesn't handle this case very well yet: passing this component to linaria'sstyled
doesn't even compile.and yields this rather long error message:
This is because the union type is distributed when acted on a conditional type, as described here.
Summary
The fix is quite simple: we add an extra bracket to every position in which the "prop" type variable is mentioned e.g
[T] extends React.ComponentType<any> ? ... : ...
to make the type non-distributive.