Yesterday, Microsoft announced the release of TypeScript 3.7 with new tooling features, optional chaining, nullish coalescing, assertion functions, and much more.
This release also includes breaking features; a few changes in the DOM where the types in lib.dom.d.ts have been updated; the typeArguments property has been removed from the TypeReference interface.
Also, TypeScript 3.7 emits get/set accessors in .d.ts files which can cause breaking changes for consumers on older versions of TypeScript like 3.5 and prior. TypeScript 3.6 users will not be impacted as the version was future-proofed for this feature.
Let us have a look at other new features in TypeScript 3.7.
What’s new in TypeScript 3.7?
Optional Chaining
TypeScript 3.7 implements Optional Chaining, one of the most highly-demanded ECMAScript features that was filed 5 years ago.
Optional chaining lets one write code that can immediately stop running some expressions if it is run into a null or undefined. The star of the show in optional chaining is the new ?. operator for optional property accesses.
Optional chaining also includes two other operations; optional element access, which acts similarly to optional property accesses, but allows us to access non-identifier properties (e.g. arbitrary strings, numbers, and symbols). The second one is an optional call, which allows to conditionally call expressions if they’re not null or undefined.
Assertion Functions
Assertion functions are a specific set of functions that throw an error if something unexpected happens. Assertions in JavaScript are often used to guard against improper types being passed in. Unfortunately in TypeScript, these checks could never be properly encoded. For loosely-typed code, this meant TypeScript was checking less, and for slightly conservative code it often forced users to use type assertions.
Another alternative was to rewrite the code such that the language could analyze it. However, this was not convenient. To solve this, TypeScript 3.7 introduces a new concept called “assertion signatures” which models these assertion functions.
The first type of assertion signature ensures that whatever condition is being checked must be true for the remainder of the containing scope. The other type of assertion signature doesn’t check for a condition but instead tells TypeScript that a specific variable or property has a different type.
Build-Free Editing with Project References
In TypeScript 3.7, when opening a project with dependencies, TypeScript will automatically use the source .ts/.tsx files instead. This means projects using project references will now see an improved editing experience where semantic operations are up-to-date.
Website and Playground Updates
TypeScript playground now includes awesome new features like quick fixes to fix errors, dark/high-contrast mode, and automatic type acquisition so you can import other packages. Each feature here is explained through interactive code snippets under the “what’s new” menu.
Many users and developers are excited to try out TypeScript 3.7.
Amazing release! You all absolutely nailed it in DX this iteration. I think optional chaining and null coalescing are going to make strict mode an easier sell for people who were on the fence. Coupled with the better control flow analysis—this will help us write better code.
— Kevin Saldaña (@kmsaldana1) November 5, 2019
Optional chaining is finally out!
Lots of exciting new features in TypeScript 3.7 ❤️https://t.co/9diq3j6hTx
— Minko Gechev (@mgechev) November 5, 2019
To know more about other new features in TypeScript 3.7, read the official release notes.
Read Next
Announcing Feathers 4, a framework for real-time apps and REST APIs with JavaScript or TypeScript