"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Node.js no implementó TypeScript

Node.js no implementó TypeScript

Publicado el 2024-11-01
Navegar:801

Node.js did not implement TypeScript

Un breve artículo sobre las razones por las que Node.js no implementó TypeScript.

Lo primero es lo primero

Lo que sigue es una explicación de lo que se ha hecho y lo que no se ha hecho en Node.js con respecto a TypeScript.

Este artículo no pretende ser una crítica al equipo de Node.js o al equipo de TypeScript.

De hecho, es todo lo contrario.

Creo seriamente que el equipo de Node.js ha tomado la mejor decisión posible al "implementar" TypeScript como lo hizo.

Lo que realmente estoy enfatizando aquí es que Node.js no implementó TypeScript. Simplemente le agregaron algún tipo de soporte. Esta es una distinción crucial que creo que a menudo se pasa por alto en las discusiones sobre Node.js y TypeScript.

En las últimas semanas, conté más de 50 artículos citados en boletines que leí que mencionaban que Node.js implementó TypeScript.

Creo que es hora de aclarar este punto de una vez por todas.

Alerta de spoiler: Node.js no implementó TypeScript.

TypeScript: una breve historia y algunos datos

En 2010, Microsoft lanzó TypeScript, un superconjunto de JavaScript que agrega escritura estática al lenguaje. TypeScript fue diseñado para abordar algunas de las deficiencias de JavaScript, como la falta de seguridad de tipos y la dificultad de mantener grandes bases de código. Desde su lanzamiento, TypeScript ha ganado popularidad entre los desarrolladores y muchos proyectos lo han adoptado como idioma principal.

Según la última encuesta State Of JS, TypeScript está prácticamente en todas partes. El 78% de los desarrolladores usa TypeScript durante al menos el 50% de su tiempo de desarrollo, por lo que no es de extrañar que el eco de "Node.js implementó TypeScript" llegó incluso a los rincones más profundos de la web.

Pero, para que quede claro, no sucedió. Y probablemente nunca lo hará.

los problemas

Hay varias razones por las que Node.js no implementó TypeScript. Estos son los que creo que son los dos más importantes:

#1: TypeScript inyecta cosas en tiempo de ejecución.

¿Sabías en qué se convierte una enum en tiempo de ejecución? Un objeto.

Y este es solo uno de los, afortunadamente, pocos ejemplos de cómo TypeScript inyecta cosas en tiempo de ejecución. Esto es un problema para Node.js porque significaría que el tiempo de ejecución tendría que ser consciente de las características de TypeScript, lo que introduciría mucha complejidad y gastos generales.

Si Node.js quiere mantener su coherencia con ECMAScript y no tener que lidiar con la gestión de dependencias por el resto de su existencia, no puede aceptar TypeScript como una dependencia en la forma actual.

#2: Versionado semántico.

TypeScript no sigue el control de versiones semántico (semver).

Node.js, por otro lado, sigue estrictamente semver y tiene tres líneas de lanzamiento diferentes (actualmente, tenemos 18.x, 20.x, 22.x). Esto significa que se pueden introducir cambios importantes en versiones menores o de parches, lo que puede causar problemas de compatibilidad con el código existente.

Además, la cantidad de plataformas compatibles es enorme, por lo que no es fácil mantener todo bajo control.

Node.js simplemente no puede aceptar TypeScript como una dependencia porque rompería todo. Este es un problema fundamental que impide que Node.js implemente TypeScript.

Entonces, ¿qué hicieron?

Aquí es donde surge la confusión. Node.js no implementó TypeScript, pero agregó eliminación de tipos bajo una bandera experimental. Esta característica permite a los desarrolladores escribir código TypeScript y compilarlo en JavaScript sin la información de tipo. Este es un compromiso que permite a los desarrolladores usar TypeScript en Node.js sin introducir los problemas mencionados anteriormente.

¿Quieres un ejemplo? Aquí tienes:

function sum(a: number, b: number): number {
  return a   b;
}

Esta función, cuando se compila con el indicador --experimental-strip-types, se convertirá en:

function sum(a        , b        )         {
  return a   b;
}

¿Viste eso? Los tipos desaparecieron y fueron reemplazados por espacios. Pero, ¿por qué?, te preguntarás. Bueno, porque al hacerlo se conservan las referencias a los mapas fuente sin la molestia de tener un proceso de compilación separado para ellos.

Internamente, esto se hace a través de un paquete llamado amaro que incluye swc, una conocida herramienta de compilación que realiza la eliminación real.

Por supuesto, existen limitaciones, como la imposibilidad de utilizar funciones específicas de TypeScript como las enumeraciones mencionadas anteriormente. Pero aun así, es un gran paso adelante evitar que la gente escriba 135 archivos de configuración para hacer que una función de suma acepte dos números y devuelva un tercero.

Chiao,
Miguel.

Declaración de liberación Este artículo se reproduce en: https://dev.to/cadienvan/nodejs-did-not-implement-typescript-1k4p?
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3