Node.js v23.6.0 was recently released, and it comes with a significant update: the unflagging of --experimental-strip-types
. This means Node.js can now run TypeScript files natively without any additional configuration.
Why TypeScript Matters
TypeScript enhances JavaScript by introducing optional static typing and advanced features such as interfaces, generics, and type inference. Over the years, it has become the de facto standard for large-scale JavaScript applications. With this integration into Node.js, TypeScript becomes even more accessible to backend developers.
Running TypeScript in Node.js
To execute a TypeScript file in Node.js, simply run:
node index.ts
In addition to .ts
files, Node.js also supports .mts
and .cts
files, but .tsx
is not supported.
How Node.js Executes TypeScript
Node.js uses a version of swc
to strip out the type annotations, leaving plain JavaScript code that it can execute.
Considerations for Running TypeScript in Node.js
Local Imports Must Refer to TypeScript Files
When using TypeScript in an environment without a bundler, you might have previously written imports like this:
import { myFunction } from './my-module.js';
instead of from './my-module.ts'
Why is that? The TypeScript compiler would not modify module extensions like './my-module.js'
, so developers had to use extensions that aligned with the transpiled JavaScript output.
However, since Node.js uses file extensions to determine the module type, you must explicitly reference TypeScript files in your imports:
import { myFunction } from './my-module.ts';
This change is necessary because Node.js relies on file extensions to determine the module type. In contrast, the TypeScript compiler previously left module specifiers like './my-module.js'
unchanged, requiring developers to adapt to the transpiled output.
No Built-in Type Checking
Node.js does not perform type checking when running TypeScript files. To ensure type safety, you’ll need to run the TypeScript compiler (tsc
) or a similar tool locally, for example:
tsc --watch
Additionally, configuring your tsconfig.json
correctly is crucial for consistency between type checking and coding:
{
"compilerOptions": {
"target": "esnext",
"module": "nodenext",
"allowImportingTsExtensions": true,
"rewriteRelativeImportExtensions": true,
"verbatimModuleSyntax": true
}
}
type
Keyword Must Be Used to Import Types
type
keyword is necessary when importing types – otherwise type stripping won’t remove them.
// Type import
import type { Item } from './my-module.ts';
// Inline type import
import { myFunction, type Item } from './my-module.ts';
Limitations of Running TypeScript in Node.js
No Support for Non-JavaScript Language Features
Certain TypeScript-specific features are not supported, including:
- Enums
- Namespaces
- Parameter properties in class constructors
To enable these features, you can add the --experimental-transform-types
flag.
No Support for Future JavaScript Features Brought by TypeScript
TypeScript allows running upcoming JavaScript features (e.g., decorators) on current JavaScript engines, by transpiling them.
However, since Node.js only strips TypeScript types, such features are not supported.
Can Older Node.js Versions Run TypeScript?
According to Marco on X, TypeScript support will be coming to to Node.js v22 but not to v20.
References
We are Leapcell, your top choice for deploying Node.js projects to the cloud.
Leapcell is the Next-Gen Serverless Platform for Web Hosting, Async Tasks, and Redis:
Multi-Language Support
- Develop with Node.js, Python, Go, or Rust.
Deploy unlimited projects for free
- pay only for usage — no requests, no charges.
Unbeatable Cost Efficiency
- Pay-as-you-go with no idle charges.
- Example: $25 supports 6.94M requests at a 60ms average response time.
Streamlined Developer Experience
- Intuitive UI for effortless setup.
- Fully automated CI/CD pipelines and GitOps integration.
- Real-time metrics and logging for actionable insights.
Effortless Scalability and High Performance
- Auto-scaling to handle high concurrency with ease.
- Zero operational overhead — just focus on building.
Explore more in the Documentation!
Follow us on X: @LeapcellHQ
Source link
lol