TypeScript 4.1, a planned upgrade to Microsoft’s popular open source language that adds types to JavaScript, is now available as a beta release, featuring template literal types and a multitude of other improvements.
The template literal type has the same syntax as template literal strings in JavaScript except it is used in type positions. When used with concrete literal types, a new string literal type is produced by concatenating the contents.
Unveiled September 18, the TypeScript 4.1 beta also lets developers re-map keys in mapped types with a new as
clause. This new clause lets developers leverage features like template literal types to create new property names based on old ones. Keys can be filtered by producing never
, saving developers from having to use an extra Omit
helper type in some cases.
A release candidate for TypeScript 4.1 is due in October. TypeScript 4.0, the current major release, arrived in August. Other capabilities in TypeScript 4.1 include:
- With a recursive conditional types capability, some restrictions are eased on conditional types, which are now able to immediately reference themselves within their branches, making it easier to write recursive type aliases. Microsoft cautions that recursive types should be used responsibly and sparingly.
- A new flag,
--noUncheckedIndexedAccess
, provides a node where every property access or indexed access is considered potentially undefined. This flag can catch out-of-bounds errors but might be noisy for a lot of code. It is not automatically enabled by the--strict
flag. - The
paths
option can be used withoutbaseUrl
, to avoid an issue in which poor paths have been used by auto-imports. checkJs
now impliesallowJs
, fixing a situation in which starting a checked JavaScript project required bothallowJs
andcheckJs
, which caused friction.- The React 17 framework’s
jsxcode
andjsxscode
factory functions are supported through two new options for thejsxcode
compiler optionsreact-jsx
andreact-jsxdev
. - The JSDoc tag
@see
now has better support in editors for JavaScript and TypeScript. - In a breaking change, members marked as
abstract
can no longer be marked asasync
. In another breaking change,resolve
parameters are no longer optional inPromise
.
The TypeScript 4.1 beta can be accessed through NuGet or NPM:
npm install typescript@beta