请写一篇关于【TypeScript快速入门:30分钟上手指南】的技术文章
上周五晚上十一点半,我刚改完一个后端接口的 bug,微信突然弹出老婆的消息:“明天能来吗?这周你又鸽了两次。”
我盯着屏幕愣了几秒,手指悬在键盘上,打字又删掉。最后回了个“对不起,项目上线卡住了,可能……还得再熬一晚。”
她没再回消息。
那一刻我坐在深圳城中村3500块月租的单间里,窗外是永远修不完的地铁施工声,桌上泡面桶堆了三个——而我的 GitHub commit 记录显示,过去72小时我 push 了18次。不是我不想见她,是真的走不开。因为下周就要正式入职大厂了,我得用 TypeScript 把这套爬虫系统重构完,给新团队交个像样的“见面礼”。
起因:从 JavaScript 的“信任危机”说起
去年十月,我还在一家小创业公司做全栈,月薪15k,技术栈是纯 JavaScript + Node.js。那时候写代码靠的是“玄学”——变量名拼错、传参类型不对、函数返回 undefined 却被当成对象调用……这些 bug 像幽灵一样,在测试环境跑得好好的,一上线就炸。
最惨的一次,是个爬虫脚本。我们抓取某电商平台的商品数据,结果因为某个字段突然从 string 变成 null,整个流程崩溃,导致当天的数据报表全部缺失。老板在群里 @ 我:“怎么回事?这都第几次了?”
我连夜 debug,发现是第三方 API 字段结构悄悄变了。但更让我崩溃的是:JavaScript 根本不会提前告诉我哪里错了。它只会默默执行,直到 runtime 才给你一个“Cannot read property 'xxx' of null”的 error,然后优雅地退出——留下我在凌晨三点对着日志发呆。
那晚我跟我老婆视频,她说:“要不你试试 TypeScript?我看你们组新来的实习生都在用。”
我当时嗤之以鼻:“TS?不就是 JS 加点类型注解?多此一举,影响开发速度。”
但她一句话点醒了我:“你不是说想进大厂吗?人家简历都写着‘熟练掌握 TypeScript’。”
我沉默了。是啊,我投了三个月简历,面试挂了六次,其中四次都被问到 TS 相关问题。最后一次面试官直接说:“你的项目都是 JS 写的,缺乏类型安全意识,工程化能力不足。”
那一刻我知道,不是 TS 多余,是我太菜了。
转折:30分钟,真的能上手吗?
十一月底,我拿到了某大厂的 offer,月薪涨到22k。HR 说:“下个月入职,建议提前熟悉下我们的技术栈,主要是 Node.js + TypeScript,后端服务和内部工具链基本都用 TS。”
我立刻打开 VS Code,新建了一个 learn-ts 文件夹。目标很明确:30分钟,搞懂 TS 最核心的东西,能跑起来就行。
我列了三个必须掌握的点:
- 类型注解(Type Annotations)
- 接口(Interface)与类型别名(Type Alias)
- 编译与配置(tsconfig.json)
第一步:给变量“上户口”
// 不再是 var name = "张三" —— 这样太野了
let name: string = "张三";
let age: number = 24;
let isMarried: boolean = true;
// 数组也要有身份
let hobbies: string[] = ["coding", "吃老婆做的红烧肉"];
// 或者
let scores: Array<number> = [90, 85, 92];
神奇的是,一旦我写了 name: string,VS Code 立刻提示:如果你试图 name = 123,它会标红并报错:“Type 'number' is not assignable to type 'string'.”
这不是运行时才报错,而是写代码的时候就拦住了你。
我突然理解了什么叫“防御性编程”——TS 就像一个严格的管家,不让你乱来。
第二步:定义数据结构,告别“猜字段”
以前写爬虫,我经常这样:
// JS 时代:这个 data 到底长啥样?看文档?还是 console.log?
function processProduct(data) {
console.log(data.title); // 可能是 title?name?product_name?
}
现在用 TS:
interface Product {
id: number;
title: string;
price: number;
inStock: boolean;
}
function processProduct(product: Product) {
// 现在 product. 一打出来,VS Code 自动提示所有字段!
console.log(product.title); // 安全!确定有!
}
更爽的是,如果第三方 API 返回的结构变了,我只要改 interface,所有用到的地方都会报错——一次性定位所有需要修改的代码,而不是等到半夜被报警电话吵醒。
第三步:编译成 JS,无缝对接现有生态
TS 不能直接运行,需要编译。我装了 typescript 包:
npm install -g typescript
tsc --init # 生成 tsconfig.json
默认配置就能跑。我把 index.ts 编译成 index.js:
tsc index.ts
node index.js
完美兼容 Node.js 后端!而且我发现,很多 npm 包已经自带 .d.ts 类型声明文件,比如 axios、cheerio(爬虫常用),装上就能获得智能提示,连文档都不用查。
那天晚上,我只用了28分钟,就把一个简单的爬虫脚本从 JS 迁移到 TS。虽然只是加了几个 interface 和类型注解,但那种“代码终于听话了”的感觉,像极了第一次用 Git 分支管理代码——原来世界可以这么有序。
实战:用 TS 重写我的爬虫系统
入职前一周,我决定把之前那个总崩的爬虫系统彻底重写。
旧版是纯 JS,逻辑混乱,错误处理靠 try-catch 堆砌。新版我做了三件事:
用 interface 定义所有数据模型
interface RawProduct { name: string; price_str: string; // 注意:原始字段名可能很怪 } interface CleanProduct { id: number; title: string; price: number; // 已解析为数字 }写一个 parser 函数,做强类型转换
function parseProduct(raw: RawProduct): CleanProduct { return { id: generateId(), title: raw.name.trim(), price: parseFloat(raw.price_str.replace('¥', '')), }; }如果
raw.price_str是 null,TS 会在编译时报错,逼我处理边界情况。用 async/await + Promise 明确异步流程
async function scrapePage(url: string): Promise<CleanProduct[]> { const html = await fetchHtml(url); const rawProducts = extractFromHtml(html); return rawProducts.map(parseProduct); }
整个过程,VS Code 成了我的第二大脑。每当我打 .,它就告诉我“你能用什么”;每当我传错参数,它就立刻提醒“类型不匹配”。
我不再需要靠记忆或翻文档去确认字段名,也不用担心传错参数类型。
最感动的是,当我把代码推到 GitHub 上,README 里写着 “TypeScript powered”,老婆看到后说:“哇,看起来好专业!”
其实我知道,代码没变多高级,只是有了类型约束,它变得更可读、更可靠、更像个“工程”而不是“脚本”。
思考:TS 不是银弹,但它是成年人的责任感
有人吐槽 TS 冗长、增加学习成本、拖慢开发速度。
但我想说:当你写的代码会影响别人、会被多人维护、会跑在生产环境时,类型安全不是“可选项”,而是“必选项”。
尤其是做后端或爬虫这类数据密集型任务,输入输出结构复杂,边界情况多。没有类型系统,就像闭着眼开车——偶尔能到终点,但迟早出事。
而且,TS 的学习曲线其实很平缓。你不需要一开始就精通泛型、装饰器、高级类型推导。只要先学会给函数参数和返回值加类型,就已经比 80% 的 JS 开发者更稳了。
我现在的做法是:
- 新项目直接用 TS
- 旧 JS 项目,逐步迁移,先加
// @ts-check,再慢慢补类型 - 所有爬虫脚本、数据处理工具,一律 TS + GitHub Actions 自动部署
结尾:写给同样在奋斗的你
写这篇文章的时候,已经是周日凌晨两点。老婆刚刚睡下,我没敢开语音,怕吵醒她。明天一早我就坐高铁去广州见她——这次一定不鸽。
回想这半年,从被 TS 劝退,到主动拥抱它,再到用它拿下大厂 offer,我最大的感悟是:技术不是炫技,而是解决问题的工具。而好的工具,会让你少犯错,多睡觉,早点下班去见重要的人。
如果你也像我一样,正在准备面试、重构项目、或者只是厌倦了半夜修 bug,不妨花30分钟试试 TypeScript。
不用追求完美,先跑起来,再慢慢优化。
毕竟,我们写代码,不是为了讨好机器,而是为了更好地生活。
PS:我的爬虫项目已开源在 GitHub,搜 ts-scraper-demo 就能找到。欢迎 star,也欢迎提 issue——说不定哪天,你也能用它,早点下班,去见那个等你的人。
后记:入职第一天,mentor 看了我的 TS 代码,笑着说:“不错,有类型思维了。”
我笑了笑,心里想:这背后,是一个异地老公的深夜自救,和一份不想再让老婆失望的决心。

评论 0