-
Notifications
You must be signed in to change notification settings - Fork 24.8k
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
fix(ivy): repeat template guards to narrow types in event handlers #35193
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In Ivy's template type checker, event bindings are checked in a closure to allow for accurate type inference of the `$event` parameter. Because of the closure, any narrowing effects of template guards will no longer be in effect when checking the event binding, as TypeScript assumes that the guard outside of the closure may no longer be true once the closure is invoked. For more information on TypeScript's Control Flow Analysis, please refer to microsoft/TypeScript#9998. In Angular templates, it is known that an event binding can only be executed when the view it occurs in is currently rendered, hence the corresponding template guard is known to hold during the invocation of an event handler closure. As such, it is desirable that any narrowing effects from template guards are still in effect within the event handler closure. This commit tweaks the generated Type-Check Block (TCB) to repeat all template guards within an event handler closure. This achieves the narrowing effect of the guards even within the closure. Fixes angular#35073
JoostK
added
type: bug/fix
action: review
The PR is still awaiting reviews from at least one requested reviewer
workaround1: obvious
freq2: medium
severity2: inconvenient
target: patch
This PR is targeted for the next patch release
area: compiler
Issues related to `ngc`, Angular's template compiler
labels
Feb 6, 2020
alxhub
approved these changes
Feb 6, 2020
JoostK
added
action: merge
The PR is ready for merge by the caretaker
and removed
action: review
The PR is still awaiting reviews from at least one requested reviewer
labels
Feb 7, 2020
kara
pushed a commit
that referenced
this pull request
Feb 7, 2020
…35193) In Ivy's template type checker, event bindings are checked in a closure to allow for accurate type inference of the `$event` parameter. Because of the closure, any narrowing effects of template guards will no longer be in effect when checking the event binding, as TypeScript assumes that the guard outside of the closure may no longer be true once the closure is invoked. For more information on TypeScript's Control Flow Analysis, please refer to microsoft/TypeScript#9998. In Angular templates, it is known that an event binding can only be executed when the view it occurs in is currently rendered, hence the corresponding template guard is known to hold during the invocation of an event handler closure. As such, it is desirable that any narrowing effects from template guards are still in effect within the event handler closure. This commit tweaks the generated Type-Check Block (TCB) to repeat all template guards within an event handler closure. This achieves the narrowing effect of the guards even within the closure. Fixes #35073 PR Close #35193
sonukapoor
pushed a commit
to sonukapoor/angular
that referenced
this pull request
Feb 13, 2020
…ngular#35193) In Ivy's template type checker, event bindings are checked in a closure to allow for accurate type inference of the `$event` parameter. Because of the closure, any narrowing effects of template guards will no longer be in effect when checking the event binding, as TypeScript assumes that the guard outside of the closure may no longer be true once the closure is invoked. For more information on TypeScript's Control Flow Analysis, please refer to microsoft/TypeScript#9998. In Angular templates, it is known that an event binding can only be executed when the view it occurs in is currently rendered, hence the corresponding template guard is known to hold during the invocation of an event handler closure. As such, it is desirable that any narrowing effects from template guards are still in effect within the event handler closure. This commit tweaks the generated Type-Check Block (TCB) to repeat all template guards within an event handler closure. This achieves the narrowing effect of the guards even within the closure. Fixes angular#35073 PR Close angular#35193
sonukapoor
pushed a commit
to sonukapoor/angular
that referenced
this pull request
Feb 17, 2020
…ngular#35193) In Ivy's template type checker, event bindings are checked in a closure to allow for accurate type inference of the `$event` parameter. Because of the closure, any narrowing effects of template guards will no longer be in effect when checking the event binding, as TypeScript assumes that the guard outside of the closure may no longer be true once the closure is invoked. For more information on TypeScript's Control Flow Analysis, please refer to microsoft/TypeScript#9998. In Angular templates, it is known that an event binding can only be executed when the view it occurs in is currently rendered, hence the corresponding template guard is known to hold during the invocation of an event handler closure. As such, it is desirable that any narrowing effects from template guards are still in effect within the event handler closure. This commit tweaks the generated Type-Check Block (TCB) to repeat all template guards within an event handler closure. This achieves the narrowing effect of the guards even within the closure. Fixes angular#35073 PR Close angular#35193
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
action: merge
The PR is ready for merge by the caretaker
area: compiler
Issues related to `ngc`, Angular's template compiler
cla: yes
freq2: medium
target: patch
This PR is targeted for the next patch release
type: bug/fix
workaround1: obvious
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.
In Ivy's template type checker, event bindings are checked in a closure
to allow for accurate type inference of the
$event
parameter. Becauseof the closure, any narrowing effects of template guards will no longer
be in effect when checking the event binding, as TypeScript assumes that
the guard outside of the closure may no longer be true once the closure
is invoked. For more information on TypeScript's Control Flow Analysis,
please refer to microsoft/TypeScript#9998.
In Angular templates, it is known that an event binding can only be
executed when the view it occurs in is currently rendered, hence the
corresponding template guard is known to hold during the invocation of
an event handler closure. As such, it is desirable that any narrowing
effects from template guards are still in effect within the event
handler closure.
This commit tweaks the generated Type-Check Block (TCB) to repeat all
template guards within an event handler closure. This achieves the
narrowing effect of the guards even within the closure.
Fixes #35073