Автоматизация задач на TypeScript: как перестать делать скучную работу руками

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему 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

Блоги

Рекомендаций по книгам