Microsoft announced the beta for TypeScript 5.0, the next major release of the JavaScript-based programming language.
With 5.0, Microsoft is working to make the language smaller, simpler, and faster. For example, the 5.0 beta takes 81% of the time to build VS Code that would take TypeScript 4.9 to do so.
These performance improvements were possible because TypeScript was recently migrated to modules from namespaces. This allows it to leverage more modern build tooling.
In TypeScript 5.0, Microsoft is implementing the upcoming ECMAScript (a JavaScript standard) feature Decorators. This new feature allows developers to customize classes and members and reuse them. They can be used on methods, properties/fields, getters, setters, and auto-accessors.
According to Microsoft, there has been support for “experimental” decorators for years, and while those have been useful to developers, they were modeled after an old version of the decorators proposal and required an opt-in compiler flag: – -experimentalDecorators. This flag will still be supported for now, but the change is that decorators will now work even without that flag.
The company also noted that the new Decorators feature won’t be compatible with — emitDecoratorMetadata, but there may be future ECMAScript proposals that bridge the gap in code that uses this.
Another thing to note about ECMAScript’s Decorator proposal is that it requires a class decorator following any “export” keyword that is present. TypeScript will enforce this in JavaScript files, but not in TypeScript files. The reason for this is that it provides an easier migration path between original “experimental” decorators and the new standard decorators.
Other updates in this release include:
- The “extends” field has been updated to enable configuration from multiple config files.
- A “const” modifier can be added to type parameter declarations.
- All enums will now be considered union enums. This is achieved by creating a unique type for each computer member. The result of this is that all enums
- New options for enabling or disabling features based on configuration
- Support for “export type *”
A full list of updates can be found here.