Support specific i18n value types in single-token usage #1861
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.
Summary
Updates types for
EuiI18n
for convenience when passing localized values to string-type props, e.g.aria-label
. This does not change any functionality, only makes it easier to consume in a common case.Given the setup,
TS would error passing the ReactChild to aria-label as it cannot downcast ReactChild to a string. It is not possible to type the incoming
label
asstring
as the render prop function itself is typed asReactChild
. This PR extends the types' logic for single-token use cases (as above) to retain thedefault
prop's type when calling the render prop function, and the above now works when rewritten to typelabel
asstring
.The new logic can also infer the type when the default value is a callback,
Although unchanged, there are underlying assumptions that any localized, mapped value retains the same type as
default
. These changes make those assumptions more apparent (see the added type casting and related comments).This also fails to correctly type if the provided value uses our string interpolation to inject ReactElements. Compare,
Checklist
- [ ] This was checked in mobile- [ ] This was checked in IE11- [ ] This was checked in dark mode- [ ] Any props added have proper autodocs- [ ] Documentation examples were added- [ ] A changelog entry exists and is marked appropriately- [ ] This was checked against keyboard-only and screenreader scenarios- [ ] This required updates to Framer X components