TypeScript 5.0 added verbatimModuleSyntax and deprecated importsNotUsedAsValues and preserveValueImports. The rule is simple: an import statement written without the type keyword is emitted verbatim, and an import written with import type is erased entirely. The compiler no longer guesses which bindings were type-only.
Two failures follow. First, a module imported purely for its side effects through a binding that happens to be unused as a value keeps its require/import in the output, which can pull a heavy dependency into a bundle. Second, and more common, is error TS1484: 'Foo' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.
The fix is mechanical: mark type-only specifiers, either as import type { Foo } from './x' or inline as import { type Foo, bar } from './x'. The flag also forbids import x = require(...) and export = inside files that the config treats as ES modules, so mixed codebases need .cts files for those.