Skip to content

Node.js con TypeScript

¿Qué es TypeScript

TypeScript es un lenguaje de código abierto mantenido y desarrollado por Microsoft. Es apreciado y utilizado por muchos desarrolladores de software en todo el mundo.

Básicamente, es un superconjunto de JavaScript que agrega nuevas capacidades al lenguaje. La adición más notable son las definiciones de tipos estáticos, algo que no está presente en JavaScript simple. Gracias a los tipos, es posible, por ejemplo, declarar qué tipo de argumentos esperamos y qué se devuelve exactamente en nuestras funciones o cuál es la forma exacta del objeto que estamos creando. TypeScript es una herramienta realmente poderosa y abre un nuevo mundo de posibilidades en proyectos JavaScript. Hace que nuestro código sea más seguro y robusto al prevenir muchos errores incluso antes de que se envíe el código; detecta problemas durante el desarrollo del código y se integra maravillosamente con editores de código como Visual Studio Code.

Podemos hablar de otros beneficios de TypeScript más adelante, ¡veamos algunos ejemplos ahora!

Ejemplos

Echa un vistazo a este fragmento de código y luego podemos analizarlo juntos:

ts
type User = {
  name: string
  age: number
}
function isAdult(user: User): boolean {
  return user.age >= 18
}
const justine: User = {
  name: 'Justine',
  age: 23,
}
const isJustineAnAdult: boolean = isAdult(justine)

La primera parte (con la palabra clave type) es responsable de declarar nuestro tipo de objeto personalizado que representa a los usuarios. Más tarde, utilizamos este tipo recién creado para crear la función isAdult que acepta un argumento de tipo User y devuelve boolean. Después de esto, creamos justine, nuestros datos de ejemplo que se pueden usar para llamar a la función definida previamente. Finalmente, creamos una nueva variable con información sobre si justine es adulta.

Hay cosas adicionales sobre este ejemplo que debes saber. En primer lugar, si no cumpliéramos con los tipos declarados, TypeScript nos alertaría de que algo está mal e impediría el mal uso. En segundo lugar, no todo debe escribirse explícitamente: TypeScript es muy inteligente y puede deducir tipos por nosotros. Por ejemplo, la variable isJustineAnAdult sería de tipo booleano incluso si no la tipificáramos explícitamente o justine sería un argumento válido para nuestra función incluso si no declaramos esta variable como de tipo User.

Bueno, tenemos algo de código TypeScript. ¿Ahora cómo lo ejecutamos?

Lo primero que hay que hacer es instalar TypeScript en nuestro proyecto:

bash
npm install -D typescript

Ahora podemos compilarlo a JavaScript usando el comando tsc en la terminal. ¡Vamos a hacerlo!

Suponiendo que nuestro archivo se llama example.ts, el comando sería:

bash
npx tsc example.ts

TIP

npx aquí significa Node Package Execute. Esta herramienta nos permite ejecutar el compilador de TypeScript sin instalarlo globalmente.

tsc es el compilador de TypeScript que tomará nuestro código TypeScript y lo compilará a JavaScript. Este comando dará como resultado un nuevo archivo llamado example.js que podemos ejecutar usando Node.js. Ahora que sabemos cómo compilar y ejecutar código TypeScript, ¡veamos las capacidades de prevención de errores de TypeScript en acción!

Así es como modificaremos nuestro código:

ts
type User = {
  name: string
  age: number
}
function isAdult(user: User): boolean {
  return user.age >= 18
}
const justine: User = {
  name: 'Justine',
  age: 'Secret!',
}
const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!")

Y esto es lo que TypeScript tiene que decir al respecto:

bash
example.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12     age: 'Secret!',
       ~~~
  example.ts:3:5
    3     age: number;
          ~~~
    The expected type comes from property 'age' which is declared here on type 'User'
example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
         ~~~~~~~~~~~~~~~~
example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.
15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
                                                     ~~~~~~~~~~~~~~~~~~~~~~
Found 3 errors in the same file, starting at: example.ts:12

Como puedes ver, TypeScript nos impide con éxito enviar código que podría funcionar inesperadamente. ¡Eso es maravilloso!

Más sobre TypeScript

TypeScript ofrece una gran cantidad de otros mecanismos excelentes como interfaces, clases, tipos de utilidad, etc. Además, en proyectos más grandes, puede declarar la configuración del compilador TypeScript en un archivo separado y ajustar granularmente cómo funciona, qué tan estricto es y dónde almacena los archivos compilados, por ejemplo. Puede leer más sobre todo este material increíble en la documentación oficial de TypeScript.

Algunos de los otros beneficios de TypeScript que vale la pena mencionar son que se puede adoptar progresivamente, ayuda a que el código sea más legible y comprensible y permite a los desarrolladores usar características de lenguaje modernas mientras envían código para versiones anteriores de Node.js.

Ejecutando código TypeScript en Node.js

Node.js no puede ejecutar TypeScript de forma nativa. No puede llamar a node example.ts desde la línea de comandos directamente. Pero hay tres soluciones a este problema:

Compilando TypeScript a JavaScript

Si desea ejecutar código TypeScript en Node.js, primero debe compilarlo a JavaScript. Puede hacerlo utilizando el compilador TypeScript tsc como se mostró anteriormente.

Aquí hay un pequeño ejemplo:

bash
npx tsc example.ts
node example.js

Ejecutando código TypeScript con ts-node

Puede usar ts-node para ejecutar código TypeScript directamente en Node.js sin necesidad de compilarlo primero. Pero no está comprobando el tipo de su código. Por lo tanto, recomendamos verificar el tipo de su código primero con tsc y luego ejecutarlo con ts-node antes de enviarlo.

Para usar ts-node, primero debe instalarlo:

bash
npm install -D ts-node

Luego puede ejecutar su código TypeScript de la siguiente manera:

bash
npx ts-node example.ts

Ejecutando código TypeScript con tsx

Puede usar tsx para ejecutar código TypeScript directamente en Node.js sin necesidad de compilarlo primero. Pero no está comprobando el tipo de su código. Por lo tanto, recomendamos verificar el tipo de su código primero con tsc y luego ejecutarlo con tsx antes de enviarlo.

Para usar tsx, primero debe instalarlo:

bash
npm install -D tsx

Luego puede ejecutar su código TypeScript de la siguiente manera:

bash
npx tsx example.ts

Si desea usar tsx a través de node, puede registrar tsx a través de --import:

bash
node --import=tsx example.ts

TypeScript en el mundo de Node.js

TypeScript está bien establecido en el mundo de Node.js y es utilizado por muchas empresas, proyectos de código abierto, herramientas y frameworks. Algunos ejemplos notables de proyectos de código abierto que utilizan TypeScript son:

  • NestJS - framework robusto y con todas las funciones que facilita la creación de sistemas escalables y bien arquitectrados de forma fácil y agradable
  • TypeORM - excelente ORM influenciado por otras herramientas conocidas de otros lenguajes como Hibernate, Doctrine o Entity Framework
  • Prisma - ORM de próxima generación con un modelo de datos declarativo, migraciones generadas y consultas de base de datos totalmente seguras para tipos
  • RxJS - biblioteca ampliamente utilizada para la programación reactiva
  • AdonisJS - Un framework web completo con Node.js
  • FoalTs - El elegante framework de Nodejs

Y muchos, muchos más proyectos geniales... ¡Quizás incluso el próximo tuyo!