Ty­pe­S­cri­pt ofrece una serie de funciones que mejoran de manera fu­n­da­me­n­tal el de­sa­rro­llo de apli­ca­cio­nes web. Este tutorial de Ty­pe­S­cri­pt brinda una in­tro­du­c­ción al lenguaje de pro­gra­ma­ción con ex­pli­ca­cio­nes de las ca­ra­c­te­rí­s­ti­cas, usos, ventajas y de­s­ve­n­ta­jas más im­po­r­ta­n­tes.

¿Qué es Ty­pe­S­cri­pt?

Ty­pe­S­cri­pt fue de­sa­rro­lla­do por Microsoft y es una extensión de Ja­va­S­cri­pt muy utilizada en el de­sa­rro­llo web. Una de sus ca­ra­c­te­rí­s­ti­cas pri­n­ci­pa­les es la ti­pi­fi­ca­ción estática. A di­fe­re­n­cia de Ja­va­S­cri­pt, que tiene tipado dinámico, en Ty­pe­S­cri­pt puedes declarar tipos de datos para variables, funciones y pa­rá­me­tros, lo que ayuda a detectar errores por an­ti­ci­pa­do, incluso antes de ejecutar el código. Esto mejora si­g­ni­fi­ca­ti­va­me­n­te la calidad del código y, al mismo tiempo, aumenta su le­gi­bi­li­dad.

La sintaxis de Ty­pe­S­cri­pt se parece mucho a la de Ja­va­S­cri­pt, lo que facilita la in­te­gra­ción en proyectos de Ja­va­S­cri­pt exi­s­te­n­tes. De hecho, Ty­pe­S­cri­pt es un su­pe­r­co­n­ju­n­to de Ja­va­S­cri­pt, por lo que cualquier código Ja­va­S­cri­pt correcto es también código Ty­pe­S­cri­pt válido. Esto te permite migrar gra­dua­l­me­n­te a Ty­pe­S­cri­pt y be­ne­fi­ciar­te de las ventajas de la ti­pi­fi­ca­ción estática y otras ca­ra­c­te­rí­s­ti­cas sin tener que re­es­cri­bir co­m­ple­ta­me­n­te tu base de código.

Este es un ejemplo sencillo de Ja­va­S­cri­pt:

function greet(name) {
    return "Hello, " + name;
}
console.log(greet(123)); // Output: "Hello, 123"
ja­va­s­cri­pt

En este código Ja­va­S­cri­pt, la función greet no está limitada a un tipo de datos es­pe­cí­fi­co para el parámetro name, por lo que la función puede llamarse sin errores incluso si se pasa un número como argumento.

En Ty­pe­S­cri­pt, el código tiene la siguiente sintaxis:

function greet(name: string): string {
    return "Hello, " + name;
}
console.log(greet(123)); // Error in TypeScript
ty­pe­s­cri­pt

Aquí hemos declarado ex­plí­ci­ta­me­n­te el parámetro name como una cadena. Si ahora se llama a la función con un número, Ty­pe­S­cri­pt mostrará un error, pues el tipo de datos que se ha pasado no coincide con el tipo de datos esperado.

Este ejemplo muestra cómo Ty­pe­S­cri­pt ayuda a detectar errores por an­ti­ci­pa­do y a aumentar la calidad del código evitando usar tipos de datos in­co­rre­c­tos. No obstante, es im­po­r­ta­n­te tener en cuenta que Ty­pe­S­cri­pt se compila en última instancia a Ja­va­S­cri­pt y puede eje­cu­tar­se en cualquier entorno de Ja­va­S­cri­pt, por lo que los be­ne­fi­cios de la seguridad de tipos solo se utilizan mientras se está de­sa­rro­lla­n­do.

Las apli­ca­cio­nes de Ty­pe­S­cri­pt

Ty­pe­S­cri­pt desempeña un papel fu­n­da­me­n­tal en varias apli­ca­cio­nes de de­sa­rro­llo de software, es­pe­cia­l­me­n­te en si­tua­cio­nes donde la seguridad de tipos y la calidad del código son decisivas.

Un ámbito im­po­r­ta­n­te de apli­ca­ción de Ty­pe­S­cri­pt es el de­sa­rro­llo web. En él garantiza que el código Ja­va­S­cri­pt escrito sea más seguro y fácil de mantener, lo que supone una ventaja en proyectos de frontend extensos en los que la base de código es compleja. Sin embargo, Ty­pe­S­cri­pt también se puede im­ple­me­n­tar en el lado del servidor (backend) en apli­ca­cio­nes Node.js para pro­po­r­cio­nar una capa adicional de seguridad. En ar­qui­te­c­tu­ras sin servidor como AWS Lambda y Azure Functions, Ty­pe­S­cri­pt ayuda a minimizar los errores y ga­ra­n­ti­zar una buena ejecución.

Ty­pe­S­cri­pt también aporta muchos be­ne­fi­cios en el ámbito del de­sa­rro­llo mu­l­ti­pla­ta­fo­r­ma, ya que puede optimizar de manera si­g­ni­fi­ca­ti­va el de­sa­rro­llo de apli­ca­cio­nes mu­l­ti­pla­ta­fo­r­ma y apps móviles. Fra­me­wo­r­ks como Na­ti­ve­S­cri­pt y React Native ofrecen soporte para Ty­pe­S­cri­pt en la pro­gra­ma­ción de apps móviles para diversas pla­ta­fo­r­mas. En el de­sa­rro­llo de juegos, Ty­pe­S­cri­pt se emplea en proyectos que utilizan WebGL o motores de juego como Phaser o Babylon.js. Su seguridad ti­po­grá­fi­ca ayuda a mejorar la calidad y facilidad de ma­n­te­ni­mie­n­to de los juegos.

También se recurre a Ty­pe­S­cri­pt para proyectos de vi­sua­li­za­ción y análisis de datos. Bi­blio­te­cas como D3.js ofrecen soporte para Ty­pe­S­cri­pt, lo que permite crear de paneles y vi­sua­li­za­cio­nes so­fi­s­ti­ca­das.

¿Cómo se instala Ty­pe­S­cri­pt?

Instalar Ty­pe­S­cri­pt es muy fácil y solo hay que seguir unos pasos. Si tienes Node.js instalado en tu ordenador, puedes instalar Ty­pe­S­cri­pt uti­li­za­n­do npm (Node Package Manager).

Paso 1. Descargar Node.js

Comprueba si tienes instalado Node.js en el ordenador. Si aún no lo tienes, puedes de­s­ca­r­gar­lo e in­s­ta­lar­lo desde la página web oficial.

Paso 2. Instalar Ty­pe­S­cri­pt en la terminal

Abre la ventana de comandos de tu sistema operativo (por ejemplo, el sistema de comandos de Windows, la Terminal en macOS o Linux) e introduce el siguiente comando para instalar Ty­pe­S­cri­pt de forma global.

npm install -g typescript
bash

La opción -g (global) indica que Ty­pe­S­cri­pt se instalará en todo tu sistema, por lo que podrás usarlo desde cualquier lugar.

Paso 3. Mostrar la versión instalada

Ejecuta este comando para comprobar si la in­s­ta­la­ción se ha realizado co­rre­c­ta­me­n­te:

tsc -v
bash

Este comando muestra la versión instalada de Ty­pe­S­cri­pt. Si ves el número de versión, significa que la in­s­ta­la­ción se habrá realizado co­rre­c­ta­me­n­te.

Después de la in­s­ta­la­ción, puedes crear archivos Ty­pe­S­cri­pt (con la extensión .ts) y co­m­pi­lar­los con el co­m­pi­la­dor Ty­pe­S­cri­pt tsc para generar archivos Ja­va­S­cri­pt.

Paso 4. Crear archivos Ty­pe­S­cri­pt

Crea un archivo Ty­pe­S­cri­pt, por ejemplo app.ts, e inserta tu código Ty­pe­S­cri­pt.

type Person = { name: string, age: number };
const alice: Person = { name: "Alice", age: 30 };
console.log(`Hello, I am ${alice.name} and I am ${alice.age} years old.`);
ty­pe­s­cri­pt

Paso 5. Compilar archivos

Compila el archivo Ty­pe­S­cri­pt in­tro­du­cie­n­do el siguiente comando:

tsc app.ts
bash

De esta forma, compilas app.ts en un archivo Ja­va­S­cri­pt con el nombre app.js. Después puedes ejecutar el archivo Ja­va­S­cri­pt.

Ca­ra­c­te­rí­s­ti­cas de Ty­pe­S­cri­pt

El de­sa­rro­llo web ha ex­pe­ri­me­n­ta­do un gran avance en los últimos años y Ty­pe­S­cri­pt ha surgido como una potente al­te­r­na­ti­va a Ja­va­S­cri­pt. A co­n­ti­nua­ción, te resumimos sus ca­ra­c­te­rí­s­ti­cas más im­po­r­ta­n­tes.

Ti­pi­fi­ca­ción estática

La ti­pi­fi­ca­ción estática es un aspecto esencial de Ty­pe­S­cri­pt y se refiere a la de­fi­ni­ción de tipos de datos para variables, pa­rá­me­tros, funciones y otros elementos de tu código. A di­fe­re­n­cia del tipado dinámico en Ja­va­S­cri­pt, donde los tipos de datos se de­te­r­mi­nan en tiempo de ejecución, en Ty­pe­S­cri­pt los tipos de datos se declaran durante el de­sa­rro­llo antes de que se ejecute el código. Por tanto, los tipos ayudan a reconocer errores y problemas lógicos por an­ti­ci­pa­do.

function add(a: number, b: number): number {
    return a + b;
}
const result = add(5, 3); // valid
const result = add(5, "3"); // Type Error
ty­pe­s­cri­pt

En este ejemplo, se utiliza la ti­pi­fi­ca­ción estática para la función add. Los dos pa­rá­me­tros a y b están de­cla­ra­dos como números (number), y la función devuelve un valor del tipo number. Es decir, si se intenta llamar a esta función con otros tipos de datos, Ty­pe­S­cri­pt detectará estos intentos como errores.

Ti­pi­fi­ca­ción opcional

Con la ti­pi­fi­ca­ción opcional es posible asignar tipos a de­te­r­mi­na­das variables y pa­rá­me­tros, mientras que otros pe­r­ma­ne­cen sin ti­pi­fi­ca­ción explícita.

function sayHello(name: string, age: any): string {
    if (age) {
        return `Hello, ${name}, you are ${age} years old.`;
    } else {
        return `Hello, ${name}.`;
    }
}
ty­pe­s­cri­pt

La función sayHello está definida con los pa­rá­me­tros name y age. El tipo any indica que el parámetro age puede aceptar cualquier tipo de dato.

Funciones ES6+

Ty­pe­S­cri­pt es co­m­pa­ti­ble con las funciones modernas de Ja­va­S­cri­pt, incluidas ES6 y otras más recientes como funciones flecha y cadenas de plantilla.

const multiply = (a: number, b: number): number => a * b;
const greeting = (name: string) => `Hello, ${name}!`;
ty­pe­s­cri­pt

Las funciones flecha (arrow functions en inglés) permiten una sintaxis más corta y concisa.

Or­ga­ni­za­ción del código

Gracias a los módulos y espacios de nombres, Ty­pe­S­cri­pt ofrece una mejor or­ga­ni­za­ción del código y garantiza que este se divida en partes re­uti­li­za­bles.

// Math.ts
export function add(a: number, b: number): number {
    return a + b;
}
// Main.ts
import { add } from './Math';
const result = add(5, 3);
ty­pe­s­cri­pt

En el anterior ejemplo, la or­ga­ni­za­ción del código se ilustra con la ayuda de módulos y el uso de import y export. La función add se define en un módulo separado Math.ts y se importa e instala en otro módulo Main.ts.

Pro­gra­ma­ción orientada a objetos (POO)

Ty­pe­S­cri­pt si­m­pli­fi­ca la pro­gra­ma­ción orientada a objetos al permitir el uso de clases Ty­pe­S­cri­pt, in­te­r­fa­ces y herencia.

class Person {
    constructor(public name: string, public age: number) {}
    greet() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
    }
}
const person = new Person("Alice", 30);
person.greet();
ty­pe­s­cri­pt

Este ejemplo muestra cómo usar clases y pro­gra­ma­ción orientada a objetos (OOP) en Ty­pe­S­cri­pt. La clase Person tiene las pro­pie­da­des name, age y un método greet para pre­se­n­tar­se y dar in­fo­r­ma­ción sobre sí misma.

Sistema de tipos ampliado

El sistema de tipos de Ty­pe­S­cri­pt es flexible y extenso. Se pueden crear tipos e in­te­r­fa­ces definidos por el usuario e incluso ampliar tipos exi­s­te­n­tes.

interface Animal {
    name: string;
}
interface Dog extends Animal {
    breed: string;
}
const myDog: Dog = { name: "Buddy", breed: "Labrador" };
ty­pe­s­cri­pt

La interfaz Animal define una propiedad name, mientras que la interfaz Dog (perro) hereda de Animal y añade una propiedad adicional breed (raza). El objeto myDog (mi perro) tiene las ca­ra­c­te­rí­s­ti­cas de ambas in­te­r­fa­ces.

Co­m­pa­ti­bi­li­dad con Ja­va­S­cri­pt

Ty­pe­S­cri­pt es co­m­pa­ti­ble con Ja­va­S­cri­pt y puede eje­cu­tar­se en cualquier entorno Ja­va­S­cri­pt, lo que facilita su in­te­gra­ción gradual en los proyectos Ja­va­S­cri­pt exi­s­te­n­tes.

// JavaScript-Code
function greet(name) {
    return "Hello, " + name;
}
// TypeScript-Code
function greet(name: string): string {
    return "Hello, " + name;
}
ty­pe­s­cri­pt

El código Ja­va­S­cri­pt (sin tipado) puede uti­li­zar­se en un código Ty­pe­S­cri­pt (con tipado) sin ningún problema.

Ventajas y de­s­ve­n­ta­jas de Ty­pe­S­cri­pt

Ty­pe­S­cri­pt ofrece una serie de ventajas, pero también tiene algunas de­s­ve­n­ta­jas. A co­n­ti­nua­ción, se expone un resumen de los ar­gu­me­n­tos a favor y en contra del su­pe­r­co­n­ju­n­to.

Ventajas

Ty­pe­S­cri­pt cuenta con un amplio eco­si­s­te­ma de de­fi­ni­cio­nes de tipos para muchas bi­blio­te­cas y fra­me­wo­r­ks Ja­va­S­cri­pt. Esto facilita la in­te­gra­ción de código de terceros en proyectos de Ty­pe­S­cri­pt, lo que resulta muy útil en el mundo actual de las apli­ca­cio­nes web, que a menudo dependen de múltiples bi­blio­te­cas y fra­me­wo­r­ks.

Además de la ti­pi­fi­ca­ción estática, Ty­pe­S­cri­pt pro­po­r­cio­na una variedad de ca­ra­c­te­rí­s­ti­cas de de­sa­rro­llo, incluidas in­te­r­fa­ces, clases, módulos y soporte para los es­tá­n­da­res actuales de EC­MA­S­cri­pt. Estas ca­ra­c­te­rí­s­ti­cas mejoran la es­tru­c­tu­ra del código, facilitan el ma­n­te­ni­mie­n­to y la es­ca­la­bi­li­dad de los proyectos, y aumentan la pro­du­c­ti­vi­dad durante el de­sa­rro­llo. Ty­pe­S­cri­pt también es co­m­pa­ti­ble con muchos entornos de de­sa­rro­llo integrado (IDE), como Visual Studio Code.

De­s­ve­n­ta­jas

Ty­pe­S­cri­pt requiere un periodo de apre­n­di­za­je inicial, sobre todo para los de­sa­rro­lla­do­res que solo han trabajado con Ja­va­S­cri­pt. Su código debe co­m­pi­lar­se a Ja­va­S­cri­pt antes de eje­cu­tar­se en na­ve­ga­do­res o entornos Node.js, lo que añade un paso más al proceso de de­sa­rro­llo.

En proyectos más pequeños, Ty­pe­S­cri­pt puede parecer ex­ce­si­va­me­n­te complejo, pues los be­ne­fi­cios de la seguridad de tipos pueden no ser tan evidentes. Debido a la in­fo­r­ma­ción de tipos adicional y al paso de co­m­pi­la­ción, los proyectos de Ty­pe­S­cri­pt pueden requerir más recursos.

Al­te­r­na­ti­vas a Ty­pe­S­cri­pt

Existen varios lenguajes de pro­gra­ma­ción web como al­te­r­na­ti­va a Ty­pe­S­cri­pt cuyo uso dependerá de las exi­ge­n­cias del proyecto y las pre­fe­re­n­cias de los de­sa­rro­lla­do­res.

  • Flow: es un tipado estático para Ja­va­S­cri­pt de­sa­rro­lla­do por Facebook. Permite añadir tipos al código Ja­va­S­cri­pt sin tener que hacer un cambio completo a Ty­pe­S­cri­pt y es una buena opción si quieres integrar gra­dua­l­me­n­te la ti­pi­fi­ca­ción en tus proyectos Ja­va­S­cri­pt.
  • Dart: es un lenguaje de pro­gra­ma­ción de­sa­rro­lla­do por Google con el que se pueden crear apli­ca­cio­nes web y apps móviles. Ofrece seguridad ti­po­grá­fi­ca y un buen re­n­di­mie­n­to y suele emplearse en co­m­bi­na­ción con el framework Flutter para de­sa­rro­llar apli­ca­cio­nes móviles.
  • Pu­re­S­cri­pt: es un lenguaje de pro­gra­ma­ción funcional es­tri­c­ta­me­n­te tipado que incluye una fuerte seguridad de tipos. Permite in­co­r­po­rar bi­blio­te­cas Ja­va­S­cri­pt.
  • Elm: es un lenguaje funcional es­tri­c­ta­me­n­te tipado para de­sa­rro­llar apli­ca­cio­nes web. Promueve el patrón de la ar­qui­te­c­tu­ra de Elm y dispone de un alto nivel de seguridad de tipos.
  • ReasonML (Bu­c­kle­S­cri­pt): se trata de un lenguaje de­sa­rro­lla­do por Facebook y basado en Ocaml que compila a Ja­va­S­cri­pt. Además, pro­po­r­cio­na seguridad de tipos y una fuerte in­te­gra­ción con React para el de­sa­rro­llo frontend.
Consejo

Si quieres pro­fu­n­di­zar en estos temas, consulta los artículos funciones Ty­pe­S­cri­pt y matrices de Ty­pe­S­cri­pt.

Ir al menú principal