-
Notifications
You must be signed in to change notification settings - Fork 12.5k
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
Support ES6 built-in symbols #1978
Merged
Merged
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
…like a built in Symbol
…IsProperSymbolReference
… esSymbols Conflicts: src/compiler/diagnosticInformationMap.generated.ts
// boolean primitive types, return the corresponding object types.Otherwise return the type itself. | ||
// Note that the apparent type of a union type is the union type itself. | ||
// For a type parameter, return the base constraint of the type parameter. For the string, number, | ||
// boolean, and symbol primitive types, return the corresponding object types.Otherwise return the |
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.
Space before Otherwise
… esSymbols Conflicts: src/services/services.ts
… esSymbols Conflicts: src/compiler/diagnosticInformationMap.generated.ts src/compiler/diagnosticMessages.json
// Return true if type has the given flags, or is a union type composed of types that all have those flags | ||
// Just like isTypeOfKind below, except that it returns true if *any* constituent | ||
// has this kind. | ||
function hasSomeTypeOfKind(type: Type, kind: TypeFlags): boolean { |
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.
someTypeHasKind
👍 |
JsonFreeman
added a commit
that referenced
this pull request
Feb 18, 2015
Support ES6 built-in symbols
👍 |
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 change adds type checking support for properties whose names are the built-in ES symbols. It allows you to create objects like:
And you get the right type when you index:
I've also added a new keyword for the symbol primitive type, as well as type guard support, errors for all the operators ,etc. To see the full design discussion, see #980.
This pull request fixes #1750, and #1863. However, strong type information is only available for the built-in ES6 symbols (properties of the global Symbol object).
This does not cover symbol indexers, which allows an object to act as a map with arbitrary symbol keys.
I also did my best to allow symbol polyfilling to work on the type side, provided that the provider of the polyfill also provide the typings for the global Symbol object.
I recommend going through the pull request commit-by-commit, although some commits were experiments that were largely reverted later on. This is mainly true for the following two commits, so feel free to skip them if you like: