One of the most important innovations in TypeScript 5.9 is support for deferred module evaluation via the import defer
syntax, which implements a proposed future ECMAScript standard. This feature allows a module to be imported without executing its code—and its associated dependencies—immediately. Evaluation only takes place when one of the module’s exported members is first accessed in the code. This approach can significantly improve application startup times, especially when working with large or platform-specific modules that aren't needed at the very beginning of the program’s execution. It’s important to note that this syntax can only be used for namespace imports (e.g., import defer * as feature from "./feature.js"
); named or default imports are not supported.
In the spirit of improving the developer experience, the project configuration process has also been noticeably simplified. The tsc --init
command now generates a much cleaner and more minimalist tsconfig.json
file. Instead of overwhelming the developer with every possible configuration option and its accompanying explanation, the new default configuration focuses only on the most essential elements and includes modern settings such as "module": "nodenext"
, "target": "esnext"
, and "jsx": "react-jsx"
. This change not only makes starting new projects smoother, but also reduces unnecessary configuration overhead for experienced developers. Supporting this is the introduction of the new --module node20
flag, which offers a stable and predictable way to configure module resolution for Node.js version 20. It provides a more reliable alternative to the constantly evolving "nodenext"
option, ensuring more consistent compilation results—especially in enterprise and production environments.
TypeScript 5.9 also boosts productivity in day-to-day code editing. In supported editors like Visual Studio Code, the pop-up windows (hovers) that display type information have become interactive. When a developer encounters a deeply nested, complex type, they no longer have to get lost in definitions: simple +
and –
buttons allow them to expand or collapse parts of the type definition directly within the pop-up. This greatly simplifies understanding complex types without having to leave the current code snippet. And for those who want even more detail, the maximum length of these pop-up windows can now be configured using the js/ts.hover.maximumLength
setting, making more comprehensive type information visible at a glance.
Significant under-the-hood improvements have also been made to optimize compilation speed. TypeScript 5.9 brings tangible performance gains to everyday workflows. The development team has refined type instantiation caching, which reduces redundant computations of intermediate types. These benefits are particularly noticeable in large codebases or when using complex external libraries. In addition, file existence checks have been optimized, which can accelerate compilation time by up to 11% in larger projects—noticeably shortening development cycles.
In summary, TypeScript 5.9 is a mature release focused on fine-tuning. The combination of deferred imports that improve runtime performance, simplified configuration that enables faster project startup, smarter editor tools that enhance productivity, and significant compilation optimizations makes this an update well worth adopting.