Почему TypeScript — идеальный язык для автоматизации
Каждый разработчик хотя бы раз в жизни тратил часы на то, чтобы вручную переименовать 200 файлов, собрать данные с десятка страниц или привести JSON к нужному формату. Рутина убивает продуктивность и мотивацию. Но есть хорошая новость: автоматизация на TypeScript решает эти проблемы быстро и элегантно.
TypeScript — это не просто надстройка над JavaScript. Это строгая типизация, читаемый код и мощная экосистема Node.js. Если вы пишете на Python, но ищете альтернативу для автоматизации, или уже работаете с TS и хотите выжать из него максимум — эта статья для вас. Мы разберём реальные кейсы: от парсинга веб-страниц до создания CLI-утилит и планировщиков задач.
С чего начать: настройка окружения
Прежде чем писать TypeScript скрипты, нужно подготовить среду. Убедитесь, что у вас установлены Node.js (версия 18+) и npm.
# Установка TypeScript глобально
npm install -g typescript
# Инициализация проекта
mkdir auto-ts && cd auto-ts
npm init -y
npm install typescript @types/node ts-node --save-dev
Создайте файл tsconfig.json с базовыми настройками:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*"]
}
Теперь можно писать скрипты в папке src и запускать их через ts-node src/script.ts. Это основа для любой автоматизации задач ts.
Кейс 1: Автоматический парсинг веб-страниц
Представьте: вам нужно собрать заголовки новостей с главной страницы новостного сайта. Ручной копипаст — прошлый век. Напишем парсер на TypeScript с использованием cheerio и axios.
npm install axios cheerio
Создадим файл src/parser.ts:
import axios from 'axios';
import * as cheerio from 'cheerio';
interface NewsItem {
title: string;
link: string;
}
async function parseNews(url: string): Promise<NewsItem[]> {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const news: NewsItem[] = [];
$('h2.news-title a').each((i, el) => {
news.push({
title: $(el).text().trim(),
link: $(el).attr('href') || '',
});
});
return news;
}
(async () => {
const items = await parseNews('https://example-news-site.com');
console.log(`Найдено ${items.length} новостей:`);
items.forEach(item => console.log(`- ${item.title}`));
})();
Этот парсинг на TypeScript можно легко расширить: добавить запись в CSV, отправку в Telegram или сохранение в базу данных. Типизация NewsItem делает код надёжным и понятным.
Кейс 2: Пакетная обработка файлов
Допустим, у вас есть папка с сотней CSV-файлов, которые нужно объединить в один, удалив дубликаты. Ручная работа займёт день. Автоматизация на TypeScript справится за секунду.
npm install fs-extra papaparse
import * as fs from 'fs-extra';
import * as path from 'path';
import Papa from 'papaparse';
interface Row {
[key: string]: string;
}
async function mergeCSV(inputDir: string, outputFile: string): Promise<void> {
const files = (await fs.readdir(inputDir)).filter(f => f.endsWith('.csv'));
const allRows: Row[] = [];
const seen = new Set<string>();
for (const file of files) {
const content = await fs.readFile(path.join(inputDir, file), 'utf-8');
const parsed = Papa.parse<Row>(content, { header: true });
for (const row of parsed.data) {
const key = JSON.stringify(row);
if (!seen.has(key)) {
seen.add(key);
allRows.push(row);
}
}
}
const csv = Papa.unparse(allRows);
await fs.writeFile(outputFile, csv, 'utf-8');
console.log(`Готово! Объединено ${allRows.length} уникальных строк.`);
}
mergeCSV('./data', './merged.csv');
Обратите внимание: мы используем Set для дедупликации, а типизация Row гарантирует, что мы не потеряем структуру данных. Это один из лучших примеров автоматизации рутины программиста.
Кейс 3: CLI-утилита для генерации отчётов
Хотите, чтобы коллеги могли запускать ваш скрипт одной командой? Создайте CLI утилиты TypeScript. Используем библиотеку commander.
npm install commander
import { Command } from 'commander';
const program = new Command();
program
.name('report-gen')
.description('Генератор отчётов из JSON-логов')
.version('1.0.0')
.argument('<file>', 'путь к JSON-файлу')
.option('-o, --output <path>', 'путь для сохранения отчёта', './report.txt')
.action((file: string, options: { output: string }) => {
console.log(`Обрабатываю файл: ${file}`);
// Здесь логика генерации отчёта
console.log(`Отчёт сохранён в: ${options.output}`);
});
program.parse();
Теперь можно запускать: npx ts-node src/cli.ts data/logs.json -o report.txt. Добавьте обработку ошибок, прогресс-бар и цвета — и получите профессиональный инструмент. Это отличный пример typescript для девопс и повседневных задач.
Кейс 4: Планировщик задач (cron) на TypeScript
Регулярные задачи — бэкапы, очистка кэша, отправка уведомлений — лучше доверить скриптам. Используем node-cron.
npm install node-cron
import cron from 'node-cron';
import { backupDatabase } from './backup';
// Каждый день в 3:00 утра
cron.schedule('0 3 * * *', async () => {
console.log('Запуск ежедневного бэкапа...');
try {
await backupDatabase();
console.log('Бэкап успешно завершён.');
} catch (err) {
console.error('Ошибка бэкапа:', err);
}
});
console.log('Планировщик запущен. Ожидаем задачи...');
Этот скрипт можно запустить как фоновый процесс на сервере. Автоматизация задач ts с cron — надёжный способ забыть о рутине.
Лучшие практики автоматизации на TypeScript
Чтобы ваши TypeScript