TypeScript vs JavaScript (y otros)
Por Arrecio
Empezamos con JavaScript, un lenguaje de programación interpretado que nació con el nombre de Mocha en los laboratorios de Netscape para terminar siendo el estándar para dotar a los navegadores web de contenido dinámico mediante la ejecución de rutinas en el lado del cliente. Antes de llamarse JavaScript pasó por el nombre LiveScript si bien actualmente existe un lenguaje con ese nombre que se vende como dialecto de JavaScript descendiente de CoffeeScript que es otro dialecto.
Para los curiosos existe en GitHub un repositorio que dice contener el código original de Mocha.
Realmente si hablamos de dialectos habría que decir que lo son de ECMAScript que es el que se considera como el estándar. La mayoría de aquellos lenguajes que se denomina dialectos de JavaScript terminan "compilando" en JavaScript, es decir que sus intérpretes son básicamente traductores que convierten el código de ese dialecto en código de JavaScript lo que convierte el diseño de estos lenguajes en una tarea medianamente sencilla, de ahí la proliferación de dialectos. Este tipo de dialectos se entienden más bien como superlenguajes (o superconjuntos) de JavaScript, usando terminología de la programación orientada a objetos entendiendo que derivan de JavaScript manteniendo todas sus características pero añadiendo otras.
La referencia a Java en el nombre tiene su razón en la similitud de la sintaxis y en realidad no tiene más que ver.
Y es que como hemos dicho es un lenguaje de programación interpretado, existiendo varios intérpretes o entornos de ejecución del mismo, llamados JavaScript Engines siendo los más populares SpiderMonkey (antes TraceMonkey) como intérprete que utiliza Mozilla Firefox, JavaScriptCore que forma parte de WebKit que es el motor de renderizado de Safari, V8 que es motor desarrollado por Google y por tanto el de Chrome y los que se basan en Chromium, Chakra que era el motor usado en Internet Explorer. Decir que Microsoft Edge actualmente usa V8 ya que desde 2018 está basado en Chromium.
Actualización 24 de marzo de 2026: He encontrado una lista de engines en esta web. Pinchando en cada motor su muestra cierta información interesante al respecto de cada uno. Sólo por curiosidad merece la pena pasearse por la misma. Además puedes ordenar la lista en base al resultado de diversos benchmarks realizados en cada motor.
Mención especial al motor Rhino, nacido en 1997 y que goza de buena salud, cuyo repositorio es mantenido por Mozilla. Se trata de un interprete que precisamente está escrito en Java y según la página de Wikipedia permite compilar el código en clases Java. No sé gran cosa de él.
Otra mención especial a KJS del entorno KDE y usado inicialmente en Konkeror. WebKit de Apple es una evolución de KJS y en buena lógica ahora Konqueror utiliza ese motor.
Que los intérpretes más conocidos formen parte de los motores de renderizado de los navegadores web nos da entender que es un lenguaje que ha estado tradicionalmente orientado a la web.
TypeScript
Introducido JavaScript vamos a hablar ahora de uno de sus dialectos más utilizados: TypeScript que empezó su desarrollo en 2012 y que goza de una documentación muy completa además de que al ser muy popular existen infinidad de fuentes donde aprender y resolver problemas que puedan surgirte.
Se trata de un especificación mantenida por Microsoft y concretamente en el día que se escribe este artículo se ha anunciado que pronto la salida de la versión 6.0.
TypeScript se entiende como un superconjunto de JavaScript aunque más bien deberíamos decir que TypeScript es superconjunto de un JavaScript que implementa ECMAScript 5.1, con lo que aprovechamos para decir que el enumerado de sus versiones es independiente, y es que esa traducción que se realiza mediante el proceso de "compilación" es compatible con dicha versión estándar (en la entrada de la wikipedia hay una lista con los estándares definidos hasta la fecha de ECMAScript). Con el paso de los años TypeScript ha ido implementando más características de las nuevas especificaciones de ECMAScript, y por tanto podemos decir que es superconjunto de un JavaScript que implementa tales características.
Podemos hacer una similitud entre las especificaciones de C++ y las de JavaScript. El lenguaje C++ esta estandarizado por ISO, la Organización Internacional de Normalización, y en particular por la ISOCPP. Desde 2011 publican una estandarización cada 3 años siendo a fecha de escribir este artículo C++23 la última versión.
De manera similar, quien estandariza JavaScript es ECMA o European Computer Manufacturers Association, que también estandariza C#. En el caso de JavaScript, ECMA emite una nueva estandarización cada año desde 2015.
Para ilustrar las diferencias con JavaScript le he dicho a Gemini que me haga un dibujo y como primera versión me ha realizado esto:
Todavía estoy intentando averiguar el motivo de los dibujos del fondo. Creo que su "inteligencia" JavaScript con el caos y TypeScript con el orden. Sin que sirva como precedente, como me ha gustado esa visión del asunto he decidido no modificar en absoluto esta primera solución que me ha dado, ya que lo que suelo hacer que es moldear y moldear a base de prompts hasta encontrar algo que yo creo que se ajusta a lo que estoy escribiendo en el blog.
Además, me ha permitido conocer un término que por algún motivo hasta ahora desconocía. Hablo de la referencia a la transpilación del código TypeScript que se indica en la segunda de las diferencias. El refranero es muy sabio y nunca te acostarás sin aprender algo más.
Al final JavaScript no deja de ser algo prehistórico, que ha evolucionado mucho con los años al paso que le marca la ECMA, y con él han evolucionado el resto de sus dialectos y los engines que hace que el código pueda ser ejecutado.
Iniciarte en TypeScript
No he escrito en mi vida una linea de código en TypeScript, y apenas he tocado JavaScript más allá de modificar algunos scripts que me he encontrado en plantillas de Django. La web oficial contiene un tutorial en el que promete enseñar TypeScript en 5 minutos a aquellas personas que ya dominen JavaScript.
Me considero de esos programadores transversales que sabe lo justo para coger ritmo con cualquier nuevo lenguaje que se presente. Pronto averiguaré si me sucede lo mismo con TypeScript ya que mi próximo entretenimiento será crear un plugin de Visual Studio Code, que de momento no sé que es lo que terminará aportando a este editor.