Node.js adds experimental support for TypeScript
Scope of the new TypeScript support
- Node can now run
.tsdirectly by stripping types at load time; no type-checking is done. - Implementation uses an SWC-based transpiler that erases types and preserves locations (by replacing types with whitespace), so stack traces still match source.
- Only “TS-for-types” is supported: features needing transforms (enums, namespaces, some decorators, etc.) are currently unsupported.
- It does not rewrite imports, convert ESM↔CJS, or touch runtime semantics.
How it’s intended to be used
- Many commenters see this as great for:
- One-off scripts and REPL-like usage.
- Development and testing without extra tooling.
- Multiple people stress that for production you still likely want a build step:
- Better control over JS targets and polyfills.
- Full TS feature support and sourcemaps.
.tsinnode_modulesis explicitly not supported to avoid ecosystem breakage.
DX, ecosystem, and competition (Bun/Deno/etc.)
- Seen as Node catching up with Deno and Bun’s “batteries-included” DX (TS, test runner, tooling).
- Some argue competition from Deno/Bun is clearly pushing Node toward nicer defaults (built-in test runner, sqlite, TS).
- Others note Bun/Deno still struggle with stability, compat, or platform support, so Node staying conservative is appreciated.
Typing philosophy and TS complexity
- Strong enthusiasm for static types; several claim most devs they work with prefer them.
- Others like dynamic JS for quick scripts and small PoCs; they use
any/unknownor skip typing early on. - Long subthreads debate:
- TS’s unsound type system vs. “sound” academic systems.
- Whether unsoundness is a real problem in practice (most say “rarely”).
- TS’s advanced types (unions, intersections, mapped/conditional types) as both powerful and a source of “type soup” and unmaintainable meta-programming.
Standardization, browsers, and future directions
- Discussion of TC39’s “type annotations” proposal: standardizing erasable syntax, not TypeScript semantics.
- Some want full TS standardized into JavaScript; others see that as a serious mistake that would freeze TS and burden browsers.
- Several suggest a future where:
- The TS compiler is used only as a type-checker.
- Runtimes (Node, browsers) just ignore types but can share a common syntax.
Concerns and open questions
- Worry about TS syntax evolving faster than Node LTS; Node plans to version the internal transpiler separately to mitigate.
- Some fear this will push more libraries to ship raw
.ts, complicating non-Node or older-tooling users. - Performance impact vs plain JS is not yet clear in the thread; startup costs and large-app behavior are flagged as “to be seen.”