Como mencionamos anteriormente algunos lenguajes de programación nos permiten detectar algunos errores durante el proceso de compilación, es decir antes de ejecutar el programa. La detección de errores dentro del código que se realiza sin ejecutarlo se conoce como static checking. El determinar que es y que no es un error mediante la determinación del tipo de valores que se están utilizando se conoce como static type checking.
TypeScript verifica un programa antes de que este se ejecute, y lo hace verificando los tipos de valores (static type checking). Para el siguiente ejemplo se ha introducido un error al escribir la propiedad de forma intencional.
const rectangulo = { altura: 10, anchura: 15 };
const area = rectangulo.altura * rectangulo.anchuRa;
Al intentar ejecutar el código anterior TypeScript me mostrará un error.
Property 'anchuRa' does not exist on type '{ altura: number; anchura: number; }'. Did you mean 'anchura'?
TypeScript detecta el error durante el proceso de compilación pero de igual forma lo hacen editores de código como Visual Studio Code que tienen soporte integrado para TypeScript.
¿Cuáles son las características que TypeScript agrega a JavaScript?
Sintaxis
TypeScript es un superset de JavaScript por lo cual podemos escribir JavaScript dentro de un archivo TypeScript. Por sintaxis nos referimos a la manera en que se escribe el código para un programa. Por ejemplo el siguiente código tiene un error debido a que no se ha cerrado el paréntesis.
let a = (4
Visual Studio Code me mostrará el siguiente error.
console.log(4 / []);
TypeScript no considera ningún bloque de código de JavaScript como un error de su sintaxis. Esto quiere decir que se puede utilizar cualquier bloque de JavaScript y ejecutarlo dentro de TypeScript sin preocuparnos de como ha sido escrito.
Tipos
TypeScript es un superset de tipos (typed superset), lo que quiere decir que añade reglas acerca de como deben ser utilizados los valores. En el ejemplo anterior observamos que rectangulo.anchuRa
no es un error de sintaxis sino que se ha escrito de forma incorrecta el nombre de la propiedad.
console.log(4 / []);
La expresión anterior corresponde a un error de sintaxis debido a que se produce un número infinito. Visual Studio Code me mostrará el siguiente error.
The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
Si bien es posible que la intención sea realmente dividir un número entre un arreglo, sin embargo la mayoría de las veces este es un error de programación. El verificador de tipos de TypeScript esta diseñado para permitir que los programas puedan capturar errores comunes tanto como sea posible.
Si se copia el código de JavaScript a TypeScript, es posible que se muestren algunos errores dependiendo de como el código este escrito.
Errores en tiempo de ejecución
TypeScript también es un lenguaje de programación que preserva el comportamiento de en ejecución de JavaScript. Por ejemplo, dividir entre cero en JavaScript produce un error Infinity
en lugar de disparar un error en tiempo de ejecución (runtime exception).
Esto quiere decir que si copias código JavaScript a TypeScript, esta garantizado que se ejecutara, incluso si TypeScript determina que existen errores en los tipos.
El mantener el comportamiento en ejecución es uno de los fundamentos de TypeScript debido a que permite una transición sencilla entre los dos lenguajes sin tener que preocuparnos por aquellas diferencias que pudieran evitar que se empiece a migrar a este nuevo lenguaje.
Eliminación del tipado
Cuando el compilador termina de revisar el código, elimina los tipos para producir un resultado “compilado”. Esto quiere decir que cuando el código ha sido compilado, el JavaScript resultante no contiene información acerca de los tipos.
TypeScript nunca cambia el comportamiento de un programa que esta basado en tipos interferidos. Puede ser que aparezcan errores durante la compilación, pero el sistema de tipado no tiene ingerencia en como se ejecuta el programa.
TypeScript no provee ninguna librería runtime adicional. Los programas utilizan las mismas librerías estándar (o librerías externas) que el resto de programas escritos en JavaScript, así que no se requiere volver a aprender nuevas librerías.
¿Debo aprender TypeScript o JavaScript?
Esta pregunta es muy común. La realidad es que no se puede aprender TypeScript sin implícitamente aprender JavaScript ya que TypeScript comparte la sintaxis y comportamiento de JavaScript, de tal forma que aprender JavaScript implica entender como TypeScript funciona.
Si te encuentras en la necesidad de buscar información acerca de como escribir un algoritmo en TypeScript recuerda que: TypeScript es JavaScript con un compilador que revisa el tipado. La forma en la que por ejemplo se ordena un arreglo en TypeScript es la misma forma en la que se hace en JavaScript. Muchas de las preguntas que puedan aparecer en relación a como hacer algo en TypeScript pueden son en realidad preguntas de como hacerlo en JavaScript.