fix(core): fix narrowing of Resource.hasValue()#63994
Closed
JoostK wants to merge 1 commit intoangular:mainfrom
Closed
fix(core): fix narrowing of Resource.hasValue()#63994JoostK wants to merge 1 commit intoangular:mainfrom
Resource.hasValue()#63994JoostK wants to merge 1 commit intoangular:mainfrom
Conversation
8d42087 to
d9faa7f
Compare
thePunderWoman
approved these changes
Sep 22, 2025
Contributor
thePunderWoman
left a comment
There was a problem hiding this comment.
LGTM!
reviewed-for: fw-general, public-api
JoostK
commented
Sep 22, 2025
d9faa7f to
30c85d2
Compare
This commit changes `Resource.hasValue()` and its derived types to improve narrowing of resources whose generic type either does not include `undefined` (i.e. when a default value has been provided) or when the generic type is `unknown`. This fixes the undesirable behavior where `hasValue()` would cause the `else` branch of an `hasValue()` conditional to have a narrowed type of `never`, given that the `hasValue()`'s type guard covers the entire type range already (meaning that the type in the else-branch cannot be inhabited in the type system, yielding the `never` type). By making the `hasValue()` method only a type guard when the generic type includes `undefined` these problems are avoided. Fixes angular#60766 Fixes angular#63545 Fixes angular#63982
30c85d2 to
9b888f8
Compare
Member
JeanMeche
approved these changes
Sep 23, 2025
thePunderWoman
pushed a commit
that referenced
this pull request
Sep 23, 2025
This commit changes `Resource.hasValue()` and its derived types to improve narrowing of resources whose generic type either does not include `undefined` (i.e. when a default value has been provided) or when the generic type is `unknown`. This fixes the undesirable behavior where `hasValue()` would cause the `else` branch of an `hasValue()` conditional to have a narrowed type of `never`, given that the `hasValue()`'s type guard covers the entire type range already (meaning that the type in the else-branch cannot be inhabited in the type system, yielding the `never` type). By making the `hasValue()` method only a type guard when the generic type includes `undefined` these problems are avoided. Fixes #60766 Fixes #63545 Fixes #63982 PR Close #63994
Contributor
|
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. |
This file contains hidden or 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
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
This commit changes
Resource.hasValue()and its derived types to improve narrowing of resources whose generic type either does not includeundefined(i.e. when a default value has been provided) or when the generic type isunknown. This fixes the undesirable behavior wherehasValue()would cause theelsebranch of anhasValue()conditional to have a narrowed type ofnever, given that thehasValue()'s type guard covers the entire type range already (meaning that the type in the else-branch cannot be inhabited in the type system, yielding thenevertype).By making the
hasValue()method only a type guard when the generic type includesundefinedthese problems are avoided.Fixes #60766
Fixes #63545
Fixes #63982