Announcing TypeScript 2.5 RC
Today we’re happy to announce our RC of TypeScript 2.5. To get started with the latest stable version of TypeScript, you can grab it through NuGet, or use the following command with npm:
npm install -g typescript@rc
Visual Studio 2015 users (who have Update 3) can install TypeScript 2.5 RC from here, and Visual Studio 2017 users using version 15.2 or later will be able to get TypeScript by simply installing it from here.
While TypeScript 2.5 will be available for other editors soon, in the meantime you can configure Visual Studio Code and Sublime Text to use a newer version. Other editors may have different approaches to trying TypeScript 2.5 RC out.
Let’s dive in and get an overview of what’s coming in TypeScript 2.5!
Optional catch
binding parameters
There are times when coding where you expect something might fail by throwing an error, but where you might not care what that error is. For example:
let contents; try { contents = fs.readFileSync('.config_file').toString('utf8'); } catch (unusedError) { // File might not exist, just fall back to some defaults. contents = createDefaultContents(); }
Notice that unusedError
is never referenced in the above example. TypeScript 2.5 introduces a late-stage ECMAScript feature to make the catch
binding optional in try
/catch
statements. That means we can just omit unusedError
altogether:
let contents; try { contents = fs.readFileSync('.config_file').toString('utf8'); } catch { // File might not exist, just fall back to some defaults. contents = createDefaultContents(); }
Thanks to Tingan Ho for his contribution on this feature!
Deduplicated and redirected packages
When importing using the Node
module resolution strategy in TypeScript 2.5, the compiler will now check whether files originate from “identical” packages. If a file originates from a package with a package.json
containing the same name
and version
fields as a previously encountered package, then TypeScript will redirect itself to the top-most package. This helps resolve problems where two packages might contain identical declarations of classes, but which contain private
members that cause them to be structurally incompatible. It also reduces the memory and runtime footprint of the compiler and language service.
The --preserveSymlinks
compiler flag
TypeScript 2.5 brings the preserveSymlinks
flag, which parallels the behavior of the --preserve-symlinks
flag in Node.js. This flag also exhibits the opposite behavior to Webpack’s resolve.symlinks
option (i.e. setting TypeScript’s preserveSymlinks
to true
parallels setting Webpack’s resolve.symlinks
to false
, and vice-versa).
In this mode, references to modules and packages (e.g. import
s and /// <reference type="..." />
directives) are all resolved relative to the location of the symbolic link file, rather than relative to the path that the symbolic link resolves to. For a more concrete example, we’ll defer to the documentation on the Node.js website.
What next?
While we’ll continue to improve TypeScript before the full 2.5 release, we also have a few other ideas for TypeScript 2.6 that are under way. Some things we’ll be working on in the meantime are improvements to TypeScript’s --watch
mode, and integration with other tools that have file-watching functionality. Our aim is to ensure that as codebases grow larger, TypeScript can give lightning-fast turnaround between the time that you save a file, and the time that you can reload your project. You can keep an eye on our pull request for changes to --watch
for the work we’ve done so far.
Thanks for reading, and we hope you give our release candidate a try!