Support ES6 built-in symbols by JsonFreeman · Pull Request #1978 · microsoft/TypeScript (original) (raw)
This change adds type checking support for properties whose names are the built-in ES symbols. It allows you to create objects like:
var obj = { Symbol.toStringTag { return ""; } }
And you get the right type when you index:
objSymbol.toStringTag; // Error because the method expected no arguments
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:
- Allow Symbol indexer in ES6
- Create global Symbol type