TypeScript (II): El Lenguaje

TypeScript es un subconjunto extendido de JavaScript. Este concepto lo tenemos que tener claro a la hora de cuando empezamos con TypeScript, existe la opinión entre muchos desarrolladores que con TypeScript se ahorran el aprender JavaScript y no es del todo cierto. Para empezar a desarrollar con TypeScript es necesario un conocimiento básico de JavaScript. 

Tipos de Variable

Uno de los grandes cambios cuando estamos trabajando en JavaScript es que una variable puede mutar de tipo en un momento puede ser un número, después un string e incluso un boolean si nos hace falta. Dentro de JavaScript existen los mecanimos para la comprobación de tipos como pueda ser las === pero esto es algo que no todos los desarrolladores  hacen y puede ocasionar muchos fallos. Ahora bien en TypeScript tambien tenemos esta posibilidad existe un tipo llamado any que se comporta de la misma manera es decir si ponemos este código tal cual funcionara igual en TypeScript que en JavaScript: 

Ahora bien si a continuación de la definición de la variable ponemos : number el resultado es el siguiente:

Ahora esto ya nos va gustando un poco más ya sabemos si nuestro código compila o no compila y por lo menos sabemos que semanticamente es correcto o no. Como en todos los lenguajes pueden ser bien number (númerico bien entero, double,…) string, any (cualquier valor y sino se indica nada es any) o boolean.

Enum

Esta es otra de las características que a los desarrolladores de .NET echábamos de menos en JavaScript.  Para ello con utilizar este código sería suficiente:

Clases

Las clases es algo que de forma directa no esta soportado en JavaScript (en la versión 6 de JS es una de las novedades) pero si que se puede simular su comportamiento utilizando Prototype. La definición de la clase es algo muy típico de lenguajes fuerte tipados como Java o C# es la forma en la que empezamos a organizar los proyectos y un punto de partida para empezar a tener organizado nuestro código y un poco más mantenible. Un ejemplo seria la siguiente clase:

Interfaces

Las interfaces son uno de los elementos más potentes que hay en TypeScript, su concepto es igual que en otros lenguajes como C#, una especie de contrato en la que tenemos que definir lo que hay en ella. Una de las grandes diferencias que tiene respecto a .NET es que la Interface la podemos utilizar tanto para variables como para funciones lo que otorga una mayor potencia a las mismas. Por ejemplo podemos tener definida una Interface Vehiculo de la siguiente manera: 

 

Módulos

Quizás en este punto sea el que más beneficios nos pueda utilizar, por regla general cuando desarrollamos en .NET más o menos siempre que se haga dentro de una coherencia tenemos varios Namespaces por los que nosostros vamos distribuyendo nuestra aplicación. En JavaScript por la propia naturaleza del lenguaje es algo que de forma natural no sale, dado de que podemos eliminar cualquier objeto que tengamos en ese momento (esto provoca que nos carguemos la aplicación sin quererlo ni desearlo). Este problema en JavaScript se puede solucionar con el patrón modulo algo que explique en el siguiente post pero que es una forma que no todos los desarrolladores consiguen hacer . Dentro de un modulo podemos incluir diversas clases, interfaces, etc… y lo mejor es que podemos acceder desde otro módulos que implementemos (este aspecto ya lo veremos en más detenimiento en un articulo posterior). Dentro del modulo todo lo que queramos utilizar en otro modulo tendremos que incluir la etiqueta export (similar al public/private) 

 

Conclusión

Ya hemos visto toda la potencia que tiene TypeScript como lenguaje, agregando unas pautas y unos patrones a un lenguaje casi sin restricciones. TypeScript es la evolución para intentar tener organizado todo el código de cliente de la misma forma que se hace desde el BackEnd. En los siguientes artículos veremos como poder utilizar librerias de terceros como JQuery, Angular, y como solucionar el problema de la carga de los scripts.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *