La integración de TypeScript con HTML abre un mundo de posibilidades para manipular el DOM de manera segura y eficiente. A través de esta poderosa combinación, podemos acceder a elementos HTML, modificar su contenido y responder a eventos del usuario con la seguridad de tipos que TypeScript nos ofrece. Veamos cómo podemos aprovechar estas capacidades para crear aplicaciones web más robustas y mantenibles.
¿Cómo interactuar con el DOM desde TypeScript?
TypeScript nos permite acceder y manipular elementos del DOM con la misma facilidad que JavaScript, pero con la ventaja adicional de la verificación de tipos. Esto significa que podemos detectar errores potenciales durante el desarrollo, antes de que lleguen a producción.
Para comenzar a interactuar con el DOM desde TypeScript, necesitamos:
Un archivo HTML con los elementos que queremos manipular.
Un archivo TypeScript que accederá a estos elementos.
Compilar el archivo TypeScript a JavaScript para que el navegador pueda interpretarlo.
Accediendo a elementos HTML mediante querySelector
Existen varias formas de seleccionar elementos del DOM en TypeScript, siendo querySelector uno de los métodos más versátiles. Este método nos permite seleccionar elementos por:
Nombre de etiqueta
Clase
ID
// Seleccionando por nombre de etiquetaconst h1 =document.querySelector('h1');console.log(h1?.textContent);// Seleccionando por claselet titulo:HTMLHeadingElement=document.querySelector('.title')asHTMLHeadingElement;console.log(titulo?.textContent);// Seleccionando por IDconst message =document.querySelector('#message')asHTMLInputElement;console.log(message.placeholder);
Es importante notar que al usar querySelector, TypeScript no puede inferir automáticamente el tipo de elemento que estamos seleccionando. Por eso, es recomendable usar la aserción de tipos (as HTMLHeadingElement) para indicarle a TypeScript qué tipo de elemento esperamos.
Manejo de valores potencialmente nulos
Cuando seleccionamos elementos del DOM, siempre existe la posibilidad de que el elemento no exista. TypeScript nos ayuda a manejar estos casos con el operador de encadenamiento opcional (?):
// El signo ? indica que h1 podría ser nullconsole.log(h1?.textContent);
Este operador nos permite acceder a propiedades de un objeto que podría ser nulo sin causar errores en tiempo de ejecución.
¿Cómo optimizar el flujo de trabajo con TypeScript y HTML?
Trabajar con TypeScript y HTML implica un ciclo constante de:
Escribir código TypeScript
Compilar a JavaScript
Verificar resultados en el navegador
Este proceso puede volverse tedioso si tenemos que ejecutar manualmente el compilador cada vez que hacemos un cambio. Afortunadamente, TypeScript ofrece el modo "watch" que automatiza este proceso.
Utilizando el modo watch para compilación automática
El modo watch de TypeScript monitorea los cambios en nuestros archivos .ts y los compila automáticamente cuando detecta modificaciones:
tsc main.ts --watch
# o la forma abreviadatsc main.ts -w
Con este comando, TypeScript estará atento a cualquier cambio en nuestro archivo y lo compilará instantáneamente, lo que nos permite centrarnos en escribir código sin preocuparnos por el proceso de compilación.
Integrando la terminal en el editor
Para hacer nuestro flujo de trabajo aún más eficiente, podemos utilizar la terminal integrada en Visual Studio Code:
Abrir una nueva terminal en VS Code (Terminal > Nueva Terminal)
Navegar hasta la carpeta de nuestro proyecto
Ejecutar el comando tsc con la opción --watch
Esto nos permite tener todo en una sola ventana: nuestro código, la terminal y, en otra pestaña del navegador, los resultados.
¿Qué consideraciones debemos tener al trabajar con el DOM en TypeScript?
Al manipular el DOM con TypeScript, hay algunas consideraciones importantes que debemos tener en cuenta para evitar errores y aprovechar al máximo las ventajas del tipado estático.
Tipado correcto de elementos HTML
TypeScript proporciona interfaces específicas para cada tipo de elemento HTML:
HTMLHeadingElement para elementos de encabezado (h1, h2, etc.)
HTMLInputElement para elementos de entrada
HTMLButtonElement para botones
Y muchos más
Usar el tipo correcto nos permite acceder a propiedades específicas de cada elemento sin errores de compilación:
// Accediendo a propiedades específicas de un inputconst inputElement =document.querySelector('#message')asHTMLInputElement;console.log(inputElement.placeholder);// Propiedad específica de inputsconsole.log(inputElement.value);// Otra propiedad específica
Carga del script en el momento adecuado
Es crucial asegurarse de que nuestro script se cargue después de que el DOM esté completamente cargado. Hay dos formas principales de lograrlo:
Usar el atributo defer en la etiqueta script:
<scriptsrc="main.js"defer></script>
Colocar la etiqueta script al final del body:
<body><!-- Contenido HTML --><scriptsrc="main.js"></script></body>
Ambas opciones garantizan que el DOM esté disponible cuando nuestro código intente acceder a él.
La integración de TypeScript con HTML nos brinda una forma poderosa y segura de manipular el DOM, aprovechando las ventajas del tipado estático para detectar errores temprano y mejorar la calidad de nuestro código. Con la práctica, el flujo de trabajo entre el editor, la terminal y el navegador se vuelve natural, permitiéndonos desarrollar aplicaciones web más robustas y mantenibles.
¿Has experimentado con TypeScript para manipular el DOM? Comparte tus experiencias y dudas en la sección de comentarios para seguir aprendiendo juntos.
Para aquellos que no ven el resumen le dejo un pedacito que luego agradeceran... o al menos eso espero!!
"Para hacer nuestro flujo de trabajo aún más eficiente, podemos utilizar la terminal integrada en Visual Studio Code:
Abrir una nueva terminal en VS Code (Terminal > Nueva Terminal)
Navegar hasta la carpeta de nuestro proyecto
Ejecutar el comandotsccon la opción--watch** "
"El modo watch de TypeScript monitorea los cambios en nuestros archivos.tsy los compila automáticamente cuando detecta modificaciones:
tsc main.ts --watch# o la forma abreviadatsc main.ts -w "
como dato curioso:
Se puede cambiar un tipo amplio a un tipo más específico
letelemento:HTMLElement;elemento =document.querySelector('button')asHTMLButtonElement;// De HTMLElement a HTMLButtonElement
Muy útil el comando tsc <nombre-del-archivo> --watch. Ya que es super tedioso estar compilando de ts a js todo el tiempo.
Si el linter les arroja este error en Windsurf o VS Code:
Cannot find name 'document'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.
Es porque el compilador no sabe que el código se ejecutará en un navegador. Para arreglarlo, asegúrense de tener un archivo tsconfig.json en la raíz con esta configuración:
Nota: Si están usando Bun, no olviden correr bun add -d bun-types y añadir "types": ["bun-types"] dentro de las opciones para que reconozca las funciones globales de Bun también.
Después de guardar, reinicien el servidor de TypeScript o el editor para que desaparezcan las líneas rojas. 🚀
La clase se centra en la manipulación del DOM usando TypeScript y el método querySelector.
Acceso al DOM: Se crea una constante para seleccionar un elemento HTML, por ejemplo, const h1 = document.querySelector('h1'). Esto permite acceder y manipular el contenido del elemento.
Verificación de nulidad: Es importante verificar que el elemento existe, usando el operador ? para evitar errores. Ejemplo: h1?.textContent.
Interacción con múltiples herramientas: Se destacó el uso de Visual Studio Code y la terminal para compilar TypeScript y ver los cambios en el navegador.
Parámetro watch: Al compilar con tsc main.ts --watch, se automatiza la recompilación al hacer cambios en el archivo.
Estos conceptos facilitan la creación de aplicaciones web interactivas con TypeScript.