Un vistazo a Typescript

Para los que aun no lo conocen, Typescript es un lenguaje Open Source considerado un superconjunto de Javascript desarrollado y mantenido por Microsoft. Extiende la sintaxis de Javascript añadiendo «tipado estático» y «objetos basados en clases». Está pensado para el uso en proyectos grandes en los que se convierte el código escrito a Javascript mediante un compilador propietario de Typescript con licencia Apache 2.

Javascript usa de forma nativa el tipado dinámico, eso quiere decir que el lenguaje identifica el tipo de las variables que usamos en el código «durante la ejecución». Typescript añade la opción de tipado estático; es decir, que nos obliga a declarar el tipo de las variables a nosotros, para que sean convertidas al tipo correcto en Javascript «durante la compilación». El tipado estático trae a la postre menos trabajo de comprobación al interior del lenguaje y beneficios en cuanto a velocidad de implementación y ejecución.

La posibilidad de añadir clases en Typescript permite que se trabaje con Javascript como un lenguaje orientado a objetos, nuevamente esto resulta muy útil en proyectos grandes que requieren manejar el código de manera modular y organizada. Microsoft lo incluye como lenguaje de programación de primer nivel en Visual Studio 2013 y versiones posteriores.

Lo nuevo en la versión 2.0

Declaración simplificada de archivos TSD

Al programar en Javascript con librerías como Jquery, Angular, Backbone u otras, tenemos en cada caso un conjunto de métodos, clases y miembros propios de la librería que usamos. Si queremos usar esas librerías dentro de Typescript debemos definir los tipos de clases y métodos.

Eso es lo que hacen los TSD (Typescript Definitions Files), o dicho en una traducción libre «Archivos de Definición de Typescript»: describen los tipos, métodos y objetos de cada librería para que Typescript los pueda identificar apropiadamente en el momento de la compilación. Los TSD usan la extensión .d.ts

En las versiones anteriores de Typescript, los TSD se localizaban mediante un gestor de paquetes llamado Typescript Definition Manager, en librerías definidas por una comunidad llamada DefinitelyTyped. El desarrollador debía aprender cómo declarar archivos basados en DefinitelyTyped.

En la versión 2.0 la declaración de los TSD es más simple pues usa Node Package Manager (npm) para realizar la tarea la declaración se hace así:

npm install -s @types/lodash

Con esto no es necesario utilizar herramientas adicionales para instalar librerias en un proyecto de Typescript; npm permite que sean declaradas e importadas sin problema en la cabecera del código y como dependencias en el archivo package.json

Tipos de valores Non-nullable

Javascript declara por defecto dos tipos de valores vacíos, null y undefined, cada vez que se crea una variable.

Esto ha sido así desde que apareció la primera versión de la API de JS. Sin embargo, con la versión 2.0 de Typescript aparecen los valores de tipo Non-nullable. Con esto null y undefined se manejan independientemente y a partir de esta versión de Typescript pueden ser trabajados con valores de tipo Number ó String según sea el caso.

Este video trae la representación de lo que acabamos de decir:

Video: https://msdnshared.blob.core.windows.net/media/2016/09/nonnullable-types-fade.mp4

Tipos de flujo de control observables

Typescript ya contaba con análisis de flujo de control desde la versión 1.8 pero a partir de la versión 2.0 se ha ampliado para devolver el tipo más específico posible en cualquier punto del código.

Ahora, cuando se combina con tipos Non-nullable, Typescript puede hacer un control mucho más complejo en el análisis de la «asignación de tipo definitiva» que se hace en la compilación.

function f(condition: boolean) {
let result: number;
if (condition) {
result = calcularCosasImportantes();
}
// Antes "Resultado" no podría haber sido inicializado!!
return result;
}

Para una explicación más amplia se puede ver la conversación en inglés con más detalles en Microsoft.

El modificador readonly

En esta versión es más fácil declarar variables a las que no se podrá tener acceso ni posibilidad de modificación, mediante la propiedad readonly.


class Persona {
readonly name: string;

constructor(name: string) {
if (name.length < 1) {
throw new Error(«Nombre vacío!»);
}

this.name = name;
}
}

// Error! ‘name’ is read-only.

new Person(«Daniel»).name = «Daniel»;

Estas son de momento las más importantes novedades que trae la versión 2.0. Typescript es JavaScript escalado. A partir de la sintaxis y semántica que los desarrolladores de JavaScript conocen, Typescript permite usar código orientado a objetos y JavaScript pre-existente, incorpora bibliotecas de JavaScript populares y llama código Typescript desde JavaScript.

Los tipos estáticos opcionales de Typescript permiten a los desarrolladores utilizar herramientas y prácticas de desarrollo altamente productivas como la comprobación estática y la refactorización de código en el desarrollo de aplicaciones JavaScript.

El compromiso a futuro de Microsoft es seguir trabajando con los socios involucrados en el proyecto y con la comunidad de Typescript para evolucionar el sistema. El objetivo próximo es lograr expresar tipos estáticos en JavaScript en más de una forma.

La empresa ofrece además, centrarse en mejorar el servicio del lenguaje y el conjunto de herramientas de Typescript para conseguir una manera más inteligente de aumentar la productividad en el desarrollo.