Fix name resolution of exports
in JS
#27394
Merged
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.
The ad-hoc name resolution rule for
exports
forgets to check the requested meaning. WhengetTypeReferenceType
callsresolveTypeReferenceName
withType
only in order to give an error when the program uses a value like a type, it is incorrectly able to resolveexports
instead of producing an error. Then this incorrect symbol gets treated like an alias, which it isn't, causing the assert.The fix, for now, is to make resolution of
exports
check the requested meaning so that it only resolves whenValue
is requested. This makes the above code an error ("Cannot use the namespace 'exports' as a type."), but I think this is fine for a bug fix. We can decide later ifexports
should behave like other expandos and be a legal type reference.Note that the name actually does resolve correctly, so JS users will get the desired completions. They'll just have an error to suppress if they have checkJs on.
Fixes #27342