Headline: Node.js executes TypeScript files directly — node script.ts works with no loader, no ts-node, and no build step — by stripping type annotations at load time. Type stripping is on by default since Node.js 23.6 and ships in the 22.18 LTS release, but it only covers erasable syntax: I enforce that with TypeScript 5.8's erasableSyntaxOnly flag, moved type checking to tsc --noEmit in CI, and left my decorator-heavy NestJS services on their existing build.

Key takeaways

Node.js runs .ts files natively by replacing type annotations with whitespace, a mechanism called type stripping. It is enabled by default since Node.js 23.6 and in the 22.18 LTS release; on Node 22.6–22.17 it sits behind --experimental-strip-types.

Type stripping handles only erasable syntax. enum, namespace with runtime code, and constructor parameter properties need the separate --experimental-transform-types flag.

Node.js never type-checks and never reads tsconfig.json. The type checker is still tsc --noEmit, run in CI or a pre-commit hook.