Running TypeScript Natively in Node.js

47 jauco 22 7/17/2025, 8:41:22 PM nodejs.org ↗

Comments (22)

jadbox · 6h ago
This is great to finally see get added. I wonder why they decided to build their own type stripper instead of just bundling tsc/swc. It feels like Node.js is going to be plagued with bugs whenever TypeScript adds new type constructs, which may take months to get patched.
Eric_WVGG · 6h ago
Would it be possible for the maintainers of Typescript to provide an official stripper that could be deployed alongside new versions of Typescript, and then snapped in?
yladiz · 5h ago
I'm not certain but I would be surprised if the TS and Node devs didn't discuss the functionality that's in Node now, since TS must have some definition of what an erasable type is (or rather, what few features aren't erasable, like enums), since the corresponding --erasableSyntaxOnly flag in TS was probably made specifically because of Node.
mosdl · 6h ago
Its just stripping types, so new constructs should not matter - there is no parsing.
eyelidlessness · 5h ago
It uses swc under the hood.
Normal_gaussian · 6h ago
Whilst I use an esbuild based build pipeline to produce production artifacts, I've found that the combination of native type transformation and node:test improvements is now sufficient to do away with most test frameworks.

My nodejs projects have tests that run faster and have fewer breaking dependencies.

The two things I have to do are to always annotate type imports with type (I have a script for that), and to use file extensions on imports.

steve_adams_86 · 6h ago
I don't mean this rhetorically, but what are the benefits of using node over something like deno now? It has been so long since I lived in the node ecosystem. I imagine it has gotten quite a bit better. Is the main benefit just ecosystem/compatibility stuff? Deno sometimes has some odd compatibility issues, but not often. The low-overhead, sane defaults, just-build kind of nature of it has become very appealing to me. Being able to build CLIs in portable binaries using a language my coworkers understand is really nice (despite that they're like 60mb, haha). I prefer Go personally, but ultimately prefer being able to collaborate.
tombl · 2h ago
It's funny, I would actually argue the opposite point. When Deno and Bun first came out, they promised a hard break from the Node ecosystem, like how Deno leaned heavily into browser compatibility, and Bun into framework features like Bun.App.

At some point they both decided that Node compatibility was more important than their unique features, but in the time since their release Node got type stripping, require(esm), sqlite, single executable apps, a permission system, a test runner, and basically ever other Deno/Bun feature they could port over.

So at this point why use runtimes that imitate Node when you could just use Node? You'll get most of the modern niceties, but also get 100% compatibility with the existing ecosystem.

reactordev · 5h ago
It’s purely ecosystem at this point. Deno, Bun, any runtime is more modern. It’s nice they are catching up but by the time typescript is a native citizen in node, others may take the crown. The codebase is ooof.

That said, there’s something to be said about being the first mover and having the ecosystem so node isn’t going away anytime soon, nor is the npm/npx ecosystem.

Go has the ability to, with a goja fork [1], to execute ESM but you would still need to transpile using another go tool to run it. I have such a runtime but it’s nowhere near as fast as bun or deno. I use it mainly so I can have agents do my local bidding.

[1] https://github.com/grafana/sobek

leptons · 5h ago
>It’s purely ecosystem at this point.

Definitely not just about ecosystem.

When AWS Lambda supports Deno, then maybe someday further down the line, I might think about trying it once for something unimportant. If that goes well, then we'll see.

reactordev · 4h ago
AWS Lambda supports custom runtimes so you can roll your own. All you need is a container.

https://gist.github.com/begoon/993e29f5cf9a384b9e0e96e70a71b...

But for ts/js land, lambda is node unless you want to build your own containers.

leptons · 2h ago
> All you need is a container.

That isn't the same as AWS Lambda supporting Deno, and you should know it. No, I don't want the extra hassle of containers.

reactordev · 11m ago
Lambda’s being pulled from storage or containers being pulled from ECR is negligible. The difference here is in the container layers. If you build a small container with alpine it’s not that bad.

Not to try to convince otherwise. Just that it isn’t as bad as it used to be. Our Golang lambdas have 2ms more startup time than our JavaScript lambdas.

Lambda is just a fancy CGI-BIN

baker_miller · 3h ago
Use Deno compile to create a standalone executable and launch on provided.al2023 like you would a rust binary
gabrielsroka · 6h ago
ChrisArchitect · 6h ago
russellbeattie · 5h ago
I honestly wish Microsoft and TypeScript enthusiasts would transform it into an official standalone language and stop polluting the JavaScript ecosystem.

Like C++, it could be a true superset of JS, importing JS code freely into TypeScript projects. It would also allow TypeScript to do whatever it wanted and not have to worry about transpilation. If it needs to work in the browser, it can be bundled into web assembly.

wrs · 5h ago
This is a mischaracterization of TypeScript. Unlike the relationship of C++ to C, TS is explicitly not a separate language from JS, and introduces no new capabilities. There’s no engine that executes TypeScript. It doesn’t do anything (*) that JavaScript doesn’t do. It just layers a type system onto JavaScript so you can tell when your JS code doesn’t make sense.

(*) with small exceptions like enums, which some think were a mistake for that reason

winrid · 1h ago
Yeah but it could be, as the runtime could take advantage of the type defs.
jasonthorsness · 5h ago
How does it pollute? Hasn't the presence of TypeScript pushed a lot of awesome features back into the later versions of JavaScript?
jinushaun · 4h ago
There is no pollution. Typescript is a strict super set. I always joke that Typescript is JavaScript code mixed with compiler instructions. The type annotations are not code.
Sacro · 5h ago
C++ isn't a superset of JS, nor is it a superset of C