TypeScript 5.3 arrives with support for import attributes

ECMAScript import attributes will support additional types of modules in a common way across JavaScript environments, starting with JSON modules.

Letters, type, code

TypeScript 5.3, an upgrade to Microsoft’s strongly typed JavaScript variant that adds support for import attributes for ECMAScript modules, is now available as a production release.

TypeScript 5.3 also offers features ranging from stable support for resolution mode in import types to interactive inlay hints for types. Announced November 20, the production release can be accessed through NuGet or NPM. The NPM command:

npm install -D typescript

TypeScript 5.3 backs the latest updates to the ECMA import attributes proposal. The ECMA proposal introduces an inline syntax for module import statements to pass information alongside the module specifier. These attributes will support additional types of modules in a common way across JavaScript environments, beginning with JSON modules.

Microsoft said one use case of import attributes was to provide information about the expected format of a module at runtime. In an example cited, Microsoft said the contents of attributes were not checked by TypeScript because they are host-specific and left alone so that browsers and runtimes can handle them.

Import attributes are an evolution an earlier proposal, import assertions, that were implemented in TypeScript 4.5 in November 2021. The most obvious difference is the use of the with keyword over the assert keyword. A less visible difference is that runtimes now can use attributes to guide the resolution and interpretation of import paths, while import assertions only could assert some characteristics after loading a module. Plans call for deprecating the old syntax for import assertion in favor of the proposed standard for import attributes.

TypeScript 5.3 also adds an option to prefer type-only auto-imports when possible. Previously, when TypeScript generated auto-imports for something in a type position,  it would add a type modifier based on the developer’s settings. With a recent change, TypeScript now enables an editor-specific option.

The production release follows a beta release published October 3 and a release candidate published November 3. Predecessor TypeScript 5.2 was released August 24.

Other new features and improvements in TypeScript 5.3:

  • TypeScript 5.3 supports the resolution-mode attribute for import type.
  • Narrowing can be performed based on conditions in each case clause with a switch (true).
  • TypeScript 5.3 more closely inspects super property accesses and method calls to see if they correspond to class fields. If they do, a type-checking error will result.
  • TypeScript inlay hints now support jumping to the definition of types, making it easier to casually navigate code.
  • When running TypeScript via tsc, the compiler will avoid parsing JSDoc, reducing parsing time and memory usage to store comments along with time spent in garbage collection.
  • Consolidation has been done between tsserverlibrary.js and typescript.js.
  • In JavaScript it’s possible to override the behavior of the instanceof operator. To do this, the value on the right of the operator must have a specific method named by Symbol.hasInstance. To better model this behavior in instanceof, TypeScript now checks if such a [Symbol.Instance] method exists and is declared as a type predicate function. If so, the tested value on the left side of the instanceof operator will be narrowed appropriately by that type predicate.

Copyright © 2023 IDG Communications, Inc.