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.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Further improve type checking for actions and triggers #58765
Further improve type checking for actions and triggers #58765
Changes from 1 commit
223a9d3
80f5761
dec2ceb
4cffe80
d58dcbb
e950e1d
f97c9c3
5e50447
fb29e4e
689dbc5
dcdec80
4b29831
40c51f8
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think will be better in this example to make all contexts into objects. And in general suggest it as best practice.
Right now from typescript perspective CountryContext and PhoneContext are the same:
string
. So we technically allowed to use country context where phone context is expected and other way around.If we make it into {country: string} and {phone: string} it would be better and typescript won't allow to use one where other is expected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yea, that's a good point. Plus makes it much easier to extend the interface without making breaking changes.
I can require it. It was originally required to be an object. What do you think? Require via typescript, or just encourage?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it is not a big trouble to require it via typescript, I'd go for it!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Turned out to help anyway with the ts issue you spotted, so, done!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
unfortunate but typescript is requiring me to pass undefined explicitly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would you consider turning ACTION_ into a prefix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It creates a pretty big commit to add to this PR, but sure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here I tried to replace
viewInMaps
forshowcasePluggability
and typescript didn't complain.I run
node scripts/type_check --project examples/ui_actions_explorer/tsconfig.json
to make sure it is not my IDE problemI am not sure if this is expected
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it is expected.
showcasePluggability
doesn't require any context so it can be attached to any trigger. It's okay to attach an action to a trigger that emits more than the action requires.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, this makes sense, thanks.
How about this example, I find it particularly weird:
I change it to:
And see the ts error message. "can't assign string to Partial | undefined" which is great.
But then I went and changed UserContext from
type Country = string;
totype Country = {country: string}
And this no longer throws typescript error for me 🤔
It seems that it should complain in this case. Not sure if this is me or the current types are not working well for matching between different object shapes because of
Partial
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome catch! It was an issue with
Partial
. I'm honestly not sure why it works now, but it seems like requiring an object let me get rid of partial type and now it works. Strange, but when I tested, (I changed the trigger context shape toCountryContext & { extra: string }
) it seems to work now:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome! seems like working as expected 👍