TypeScript 6.0 Type-Only Imports Are Now Enforced: What verbatimModuleSyntax Actually Breaks in Real Codebases
This article was written with the assistance of AI, under human supervision and review.
Most TypeScript build failures after a major version upgrade stem from one assumption: the compiler will figure out which imports are types and which are runtime values. That assumption breaks the moment teams enable verbatimModuleSyntax in tsconfig.json. The flag eliminates the compiler's guesswork around import elision, but it does so by enforcing an explicit contract that existing codebases violate in subtle, expensive ways.
The failure mode here is subtle but expensive. A codebase that compiled cleanly under TypeScript 5.x throws hundreds of errors under 6.0 with verbatimModuleSyntax enabled. The errors point to mixed import statements, namespace re-exports, and side-effect modules that the compiler previously tolerated. Teams either spend days migrating every import, or they disable the flag and lose the build integrity it guarantees.
Problem flow showing mixed imports silently elided






