Por qué TypeScript es el lenguaje ideal para la automatización
\nCada desarrollador al menos una vez en la vida ha pasado horas renombrando manualmente 200 archivos, recopilando datos de una docena de páginas o transformando JSON al formato deseado. La rutina mata la productividad y la motivación. Pero hay una buena noticia: la automatización en TypeScript resuelve estos problemas de forma rápida y elegante.
\nTypeScript no es solo una extensión de JavaScript. Es tipado estricto, código legible y un potente ecosistema Node.js. Si programas en Python pero buscas una alternativa para la automatización, o ya trabajas con TS y quieres aprovecharlo al máximo, este artículo es para ti. Analizaremos casos reales: desde scraping de páginas web hasta la creación de utilidades CLI y planificadores de tareas.
\n\nPor dónde empezar: configuración del entorno
\nAntes de escribir scripts de TypeScript, debes preparar el entorno. Asegúrate de tener instalados Node.js (versión 18+) y npm.
\n# Instalación global de TypeScript\nnpm install -g typescript\n\n# Inicialización del proyecto\nmkdir auto-ts && cd auto-ts\nnpm init -y\nnpm install typescript @types/node ts-node --save-dev\n\nCrea un archivo tsconfig.json con la configuración básica:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true\n },\n "include": ["src/**/*"]\n}\n\nAhora puedes escribir scripts en la carpeta src y ejecutarlos con ts-node src/script.ts. Esta es la base para cualquier automatización de tareas ts.
Caso 1: Scraping automático de páginas web
\nImagina: necesitas recopilar los titulares de noticias de la página principal de un sitio de noticias. El copiar y pegar manual es cosa del pasado. Escribamos un scraper en TypeScript usando cheerio y axios.
npm install axios cheerio\n\nCreemos el archivo src/parser.ts:
import axios from 'axios';\nimport * as cheerio from 'cheerio';\n\ninterface NewsItem {\n title: string;\n link: string;\n}\n\nasync function parseNews(url: string): Promise<NewsItem[]> {\n const { data } = await axios.get(url);\n const $ = cheerio.load(data);\n const news: NewsItem[] = [];\n\n $('h2.news-title a').each((i, el) => {\n news.push({\n title: $(el).text().trim(),\n link: $(el).attr('href') || '',\n });\n });\n\n return news;\n}\n\n(async () => {\n const items = await parseNews('https://example-news-site.com');\n console.log(`Se encontraron ${items.length} noticias:`);\n items.forEach(item => console.log(`- ${item.title}`));\n})();\n\nEste scraping en TypeScript se puede ampliar fácilmente: agregar escritura a CSV, envío a Telegram o almacenamiento en base de datos. El tipado de NewsItem hace que el código sea robusto y comprensible.
Caso 2: Procesamiento por lotes de archivos
\nSupongamos que tienes una carpeta con cien archivos CSV que necesitas combinar en uno solo, eliminando duplicados. El trabajo manual te llevaría un día. La automatización en TypeScript lo hará en segundos.
\nnpm install fs-extra papaparse\n\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\nimport Papa from 'papaparse';\n\ninterface Row {\n [key: string]: string;\n}\n\nasync function mergeCSV(inputDir: string, outputFile: string): Promise<void> {\n const files = (await fs.readdir(inputDir)).filter(f => f.endsWith('.csv'));\n const allRows: Row[] = [];\n const seen = new Set<string>();\n\n for (const file of files) {\n const content = await fs.readFile(path.join(inputDir, file), 'utf-8');\n const parsed = Papa.parse<Row>(content, { header: true });\n \n for (const row of parsed.data) {\n const key = JSON.stringify(row);\n if (!seen.has(key)) {\n seen.add(key);\n allRows.push(row);\n