Extensiones JavaScript para las clases
Presentación de las extensiones de JavaScript
Como hemos visto anteriormente, el lenguaje JavaScript es un lenguaje de programación orientado a objetos, pero que no gestiona clases (antes de su normalización con ECMAScript 6): es un lenguaje de programación orientado a prototipo, donde los objetos se crean a partir de otros objetos, de los que «heredan» (por supuesto, los objetos heredados pueden heredar de otros objetos y de esta manera, esta herencia de objeto en objeto, se llama encadenamiento de prototipos).
En este tipo de lenguaje (en el que JavaScript es de lejos el más popular de los representantes), hay dos aspectos que rápidamente se pueden mostrar como desconcertantes y por lo tanto, ser fuente de problemas:
-
Es más difícil leer el «perímetro» de un objeto (sus atributos, sus métodos), que utilizar la sintaxis de una clase.
-
Las propiedades propias del objeto o de manera más específica, las heredadas, se pueden eliminar, modificar, incluso añadir en cualquier momento: por lo tanto, es posible utilizando código de terceros no controlado (incluso código propio) «hacer castillos de arena».
Por otro lado, el tipado de las variables se hace dinámicamente en JavaScript y no aporta la seguridad del tipado estático.
Por estas razones (y algunas otras, principalmente el dominio de las funciones de callback o la pérdida...
El lenguaje TypeScript
TypeScript es una capa añadida al lenguaje JavaScript y creada por Microsoft en 2012. Permite principalmente:
-
Tipar opcionalmente las variables durante sus declaraciones (tipado estático).
-
Gestionar los argumentos opcionales (añadiendo un punto de consulta junto a sus nombres).
-
Crear clases e instanciarlas.
-
Gestionar una herencia simplificada.
-
Implementar las interfaces (dentro de la programación orientada a objetos).
-
Gestionar el acceso a los atributos por tres palabras reservadas: public, protected, private.
1. El transpiler tsc
El código TypeScript se transforma en código JavaScript a través de un transpiler (o transcodificador), llamado tsc.
A continuación se muestra un ejemplo de llamada de este transpiler en línea de comandos, donde code.ts es un código TypeScript:
tsc code.ts
tsc va a generar código.js, que será un código JavaScript «puro».
Por lo tanto, puede mezclar código TypeScript con código JavaScript y esto puede conducir a picos de no legibilidad.
2. Tipado estático de las variables
A continuación se muestra la especificación formal del tipado de una variable:
const|let|var <variable>: <type> = <valor>;
Dos observaciones:
-
Desde la introducción de let, la utilización de var no tiene mucho interés. Sin embargo, siempre se puede utilizar.
-
Se puede añadir un espacio opcionalmente antes o después de los dos puntos que separan el nombre de la variable, de su tipo.
a. Los tipos básicos
Los tipos básicos de TypeScript retoman los de JavaScript:
let entero: number = 1;
let pi: number = 3.14;
let bool: boolean = true;
let nombre: string = "Soy una cadena de caracteres";
let objeto: Object = {"name": "topPhone"};
b. Tipado de variables no escalares
Las variables no escalares también se pueden tipar.
El tipado de las listas puede utilizar tanto el objeto Array, como los corchetes utilizados como accesos...
El lenguaje Dart
Esta sección solo presenta un breve resumen del lenguaje Dart. Este lenguaje no se usa para implementar nuestros ejemplos de código Angular.
El lenguaje Dart de Google inicialmente tendrá por objetivo ofrecer una alternativa a JavaScript, ya sea del lado cliente (implementándolo con prioridad dentro del navegador Chrome) o del lado servidor. Pero actualmente, su desarrollo tiende a presentarlo como una extensión de JavaScript, a instancias de TypeScript. Dicho esto, en el momento en el que se escribe este libro, Dart es menos popular que este último lenguaje (por varias razones, pero principalmente porque TypeScript se utiliza por diferentes herramientas como Angular CLI).
A diferencia de JavaScript, TypeScript es un lenguaje totalmente orientado a objetos. La implementación de Dart es muy diferente de la de JavaScript, cuyo objetivo es ser mejor en términos de eficacia y seguridad. Su sintaxis, normalizada por ECMAScript, es relativamente cercana a la de TypeScript.
Se sigue utilizando mucho la palabra reservada var en el tipado de las variables, pero puede ser opcionalmente estática. Al contrario de lo que sucede con JavaScript, las variables son objetos (por ejemplo, una variable numérica se puede inicializar a null). Los tipos int y float permiten distinguir los enteros de los flotantes. Las palabras reservadas final y const se han introducido para hacer...