Native TypeScript Support in Node.js: Exploring the New Possibilities
Node+TS

Native TypeScript Support in Node.js: Exploring the New Possibilities

With the release of Node.js version 22.7.0, a new possibility emerges for developers: the direct execution of TypeScript files without the need for external tools to transpile the code. Through experimental flags like --experimental-strip-types and --experimental-transform-types, the Node.js runtime can handle .ts files natively. This functionality represents a milestone in the integration of TypeScript with the Node.js ecosystem, promising to simplify workflows and lower the barriers to adopting static typing.

Advantages of Native Support

  1. Simplified Configuration: Running TypeScript directly in Node.js eliminates the need to configure tools like ts-node or manual transpilation processes.
  2. Improved Performance: Type stripping is performed at runtime, reducing the overhead introduced by intermediate tools.
  3. Ease of Adoption: Developers can gradually integrate TypeScript into JavaScript projects without major infrastructure changes.

How to Execute TypeScript Files

To experiment with native TypeScript support, use the --experimental-strip-types flag:

node --experimental-strip-types app.ts        

If the file uses more advanced features, such as enums or namespaces, add the --experimental-transform-types flag:

node --experimental-strip-types --experimental-transform-types app.ts        

These flags require Node.js version 22.7.0 or higher. It is worth noting that the support is experimental, which means instabilities may occur.

Refactoring Projects to TypeScript

Migrating from JavaScript to TypeScript

Consider a project with the following structure:

project-js/
  ├── src/
  │   ├── app.js
  │   └── utils.js
  └── package.json        

Install TypeScript:

npm install typescript --save-dev        

Convert files to .ts:

mv src/app.js src/app.ts
mv src/utils.js src/utils.ts        

Set up TypeScript:

Generate a tsconfig.json file:

npx tsc --init        

Adjust the settings as needed.

Add types to the code:

const add = (a: number, b: number): number => a + b;        

Run the project:

node --experimental-strip-types src/app.ts        

Migrating from ts-node

If the project already uses TypeScript with ts-node, remove the dependency and adjust the scripts:

Remove ts-node:

npm uninstall ts-node        

Update the scripts in package.json:

"scripts": {
  "start": "node --experimental-strip-types src/app.ts"
}        

Test the execution:

npm start        

Challenges in Migration

When migrating projects to TypeScript, challenges may arise, such as adding types to legacy code, handling library incompatibilities where type definitions are missing, and accommodating advanced TypeScript features like namespaces and decorators, which do not yet have full support in native Node.js.

Limitations and Known Issues

  1. Unsupported Features: Decorators, complex namespaces, and some specific functionalities in tsconfig.json are not yet available.
  2. Type Errors: Node.js does not perform deep type validations, which may result in errors only being caught at runtime.
  3. Experimental Status: Since the functionality is still in development, unexpected changes may occur in future versions.

Official Release Timeline

The community expects native TypeScript support in Node.js to improve in upcoming major releases, but there is no official date for stabilization. In the meantime, using the experimental flags is recommended for smaller projects or where flexibility is a priority.

Native TypeScript support in Node.js represents a significant advancement, simplifying developers' lives and encouraging the adoption of best practices. Despite the current limitations, the functionality promises to transform the development of modern applications, bringing TypeScript even closer to the JavaScript ecosystem. Exploring this feature is essential to contribute to its maturation and widespread adoption.

Victor Vieira

Software Engineer | iOS | Swift | SwiftUI | Objective - C | Flutter | AWS

4mo

Useful tips

Like
Reply
Kleber Augusto dos Santos

Generative AI | LLMs | AI Solutions Architecture | RAG | MLOps & AIOps | Golang | Kotlin | Flutter | Java | .NET 8+ | Hexagonal Architecture | gRPC | Docker | Kubernetes | Terraform | Vertex AI | Multicloud AWS GCP Azure

4mo

Love this

Like
Reply
Jardel Moraes

Data Engineer | Python | SQL | PySpark | Databricks | Azure Certified: 5x

4mo

Very good! Thanks for sharing!

Like
Reply
Tulio Neme de Azevedo

Software Engineer | Nodejs | Typescript | AWS | Microservices

4mo

Typescript is fantastic. Code and learn can be faster when using this tool

Like
Reply
Wagner Santos

Senior Frontend Engineer | React | Web developer | TypeScript | JavaScript | AWS

4mo

Very informative

Like
Reply

To view or add a comment, sign in

More articles by Erick Zanetti

Explore topics