Microsoft está trabajando en una propuesta para soportar tipos como comentarios directamente en JavaScript.
JavaScript como lenguaje de programación, ha evolucionado de forma impresionante y lo puedes encontrar en todos lados, del lado backend con NodeJS, del lado de frontend con increíbles frameworks como: React, Angular, Vue, etc. en IOT con librerías como Johnny-Five hasta puedes crear aplicaciones móviles y de escritorio con tecnologías como electron, Capacitor, React Native, etc.
Sin embargo, la flexibilidad de JavaScript puede producir errores y dolores de cabeza, porque no hay feedback instantáneo al momento de escribir código, solo hasta que lo ejecutas te das cuenta de los errores, puede que un Linter nos ayude, pero no va más a allá del análisis que pueden hacer los lenguajes con soporte a tipos.
Por estas razones, en estos últimos años gran parte del ecosistema, librerías, proyectos y comunidades ha elegido escribir su código en TypeScript, un superset de JavaScript para traer tipado al mundo de JavaScript, ¿Cuál es la razón? Hay grandes ventajas al implementar TypeScript, pero una de las más fuertes es que los lenguajes con soporte a tipado pueden llegar a reducir hasta un 15% de bugs en tus sistemas, según el estudio: To Type or Not to Type: Quantifying Detectable Bugs in JavaScript.
Equipos como Slack y Airbnb han tenido grandes resultados en su implementación, haciendo productos más confiables y equipos más veloces con asombrosos resultados.
En el caso de Slack en su blog de ingeniería “TypeScript at Slack” nos comparte lo siguiente:
Primero, nos sorprendió la cantidad de pequeños errores que encontramos al convertir nuestro código.
Segundo, subestimamos lo poderosa que es la integración con el editor de código.
TypeScript fue una gran ayuda para nuestra estabilidad que empezamos a usarlo para todo el código nuevo a los pocos días de comenzar la implementación.
Airbnb en la conferencia “Adopting Typescript at Scale” nos menciona lo siguiente:
El 38 % de los errores se pueden prevenir con TypeScript según el análisis post mórtem.
Con TypeScript, los ingenieros pueden moverse más rápido y con mayor seguridad.
¿Tipado en JavaScript?
Cada vez que alguien escucha esto puede que tenga un sesgo negativo y piense en lenguajes como Java o C# con un fuerte tipado entonces, tenemos miedo a perder la flexibilidad de JavaScript.
Sin embargo, lenguajes como Python han introducido tipado con éxito en la comunidad y desde la versión 3.5, Pyhton introdujo “Support for type hints” para soportar el tipado y tener herramientas de análisis de código más profundo, prevenir bugs y mejorar la experiencia de los desarrolladores.
Este sería un ejemplo de código en Python con soporte a tipos:
defgreeting(name: str) -> str:
return'Hello ' + name
Esta característica ha sido bien recibida por la comunidad y ha traído una familia de herramientas interesantes en el ecosistema de Python que trabajan con tipos como: Fast API, Typer, SqlModel y pydantic entre otras.
Además, según la encuesta anual de StateJS 2021 con más de 16K de respuestas por parte de desarrolladores, el tipado en JavaScript es una de las características que más hace falta en el lenguaje.

La propuesta de Microsoft
Ahora Microsoft propone que se ponga en consideración comentarios como tipos en JavaScript de forma oficial y como parte del lenguaje.
Cuando TypeScript fue lanzado en 2012 teníamos un JavaScript muy diferente y navegadores en desacuerdo sobre el estándar, entonces TypeScript no solo ofrecía un análisis de código y verificación de tipos, sino también transpilar código a una versión estándar de JavaScript que sea soportada en todos los navegadores y entornos.
Pero con el estado actual de JavaScript, el equipo de Microsoft propone que este paso de transpilación puede ser innecesario. La propuesta es evitar este paso extra y que JavaScript tenga una definición de tipos que será evaluada por sistemas de análisis de código pero ignorada al momento de ejecutarlo.
Tipado como comentarios
La propuesta es agregar a JavaScript sintaxis nueva para agregar tipado de forma opcional e ignorada en tiempo de ejecución, entonces podríamos tener código como el siguiente:
functionadd(a: number, b: number) {
return a + b;
}
Pero ¿Qué significa que el tipado sea tratado como comentarios? Sería algo similar a lo que ya se hace con JSDoc en donde a partir de comentarios se puede agregar verificación de tipos, pero no infiere en como JavaScript opera y se ejecuta, como en el siguiente código:
/**
* @param a {number}
* @param b {number}
**/
functionadd(a, b) {
return a + b;
}
Quiere decir que no sería una propuesta invasiva, sino que es una propuesta incremental y viable para la comunidad, además que es agnóstica, es decir, la propuesta NO incluye agregar un paso extra en el análisis de código de JavaScript ni tampoco agregar el compilador de TypeScript como parte del estándar de los navegadores.
Entonces ¿Cómo funcionaría?
La propuesta del equipo de Microsoft es añadir esta nueva sintaxis de tipos nativamente a JavaScript y que con ello herramientas como TypeScript, Flow o algún editor de código como VSCode puede tomar esta nueva sintaxis y agregar el soporte a la verificación de tipos en el momento de desarrollo.
La verificación de tipos lo tendríamos en tiempo de desarrollo, mejorando la experiencia y reduciendo bugs, pero a la hora de ejecutarse en un entorno como un navegador o en el backend con NodeJS es ignorado y no se agrega ninguna capa extra al proceso normal de JavaScript.
El estado de la propuesta
En este momento la propuesta lleva el nombre de “ECMAScript proposal: Types as Comment” y está en etapa 0, será presentada en marzo de 2022 ante el TC39 que es el grupo de empresas, academias, desarrolladores, etc. encargadas de mantener y evolucionar JavaScript, por lo tanto, cualquier mejora o propuesta al lenguaje pasa por este comité, además que debe pasar por 4 etapas para que finalmente sea añadido oficialmente a JavaScript.
Esto significa que hay un camino largo para que sea aprobado y muchas propuestas pueden quedar en etapa 0, sin embargo, características como: las array functions, destructuring, async/await, Nullish coalescing, etc. también pasaron por este proceso.
Cuéntame, ¿Qué te parece esta propuesta por parte de Microsoft? Te leo en los comentarios. 👇
Curso de TypeScript