TypeScript 任务自动化:如何不再手动完成枯燥工作

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 TypeScript 是自动化的理想语言

每位开发者至少都曾花费数小时手动重命名 200 个文件、从十几个页面收集数据或将 JSON 转换为所需格式。日常琐事会扼杀生产力和动力。但好消息是:TypeScript 自动化可以快速而优雅地解决这些问题。

TypeScript 不仅仅是 JavaScript 的超集。它拥有严格的类型检查、可读性强的代码以及强大的 Node.js 生态系统。如果您使用 Python 但正在寻找自动化的替代方案,或者已经在使用 TS 并希望充分利用它,那么这篇文章适合您。我们将分析实际案例:从网页解析到创建 CLI 工具和任务调度器。



入门:环境设置

在编写 TypeScript 脚本之前,需要准备好环境。确保您已安装 Node.js(18+ 版本)和 npm。

# 全局安装 TypeScriptnpm install -g typescript

# 初始化项目mkdir auto-ts && cd auto-tsnpm init -ynpm 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:自动网页解析

想象一下:您需要从新闻网站首页收集新闻标题。手动复制粘贴已经过时了。让我们使用 cheerio 和 axios 编写一个 TypeScript 解析器。

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);

博客

书籍推荐