请写一篇关于【TypeScript快速入门:30分钟上手指南】的技术文章
去年十月的一个深夜,北京天通苑北三区某栋楼的502室,我坐在二手宜家书桌前,盯着屏幕上那行红色报错信息发呆:
Cannot find name 'user'. Do you need to install type definitions for node? Try npm i @types/node and then add node to the types field in your tsconfig.
窗外是熟悉的晚高峰结束后的寂静,只有远处地铁13号线偶尔传来的轰隆声。桌上泡面桶已经堆了三个,房租3500块交完后钱包只剩876块——而就在三天前,我所在的创业公司“码力全开”正式宣布停止运营。
没错,我又失业了。
老婆在隔壁房间睡着了,手机屏保还是我们去年去南锣鼓巷拍的照片。我当时真的很焦虑,甚至有点想放弃。毕竟这已经是两年内第二次经历公司倒闭,简历投出去石沉大海,连猎头都开始问我:“你是不是行业黑名单?”
但我知道,不能躺平。前端这个圈子卷得要命,Vue、React、Svelte轮番上阵,现在连TypeScript都成了大厂JD里的标配。我咬咬牙,打开VS Code,决定用30分钟——就30分钟——搞明白TypeScript到底是个啥玩意儿。
一、从“any”到“type”:一个被现实毒打的前端的觉醒
说实话,在“码力全开”那会儿,我其实一直对TypeScript嗤之以鼻。老板催功能上线像催命,产品改需求比翻书还快,哪有时间写什么类型定义?// @ts-ignore 用得飞起,any 当万能胶水,代码跑起来就行,管它红不红。
直到项目越做越大,bug越来越多。有一次上线前,我手滑把 user.name 写成了 user.nane,测试没覆盖到,结果用户注册后名字显示成 undefined。老板在晨会上黑着脸说:“我们不是玩具公司,这是生产环境。”
更惨的是,后来新来的实习生看不懂我的代码逻辑,问:“哥,这个函数返回的是对象还是数组啊?” 我翻了半天自己的代码,愣是没答上来——因为确实不确定,可能有时是 {code: 200, data: [...]},有时又是 {error: 'timeout'}。
那一刻我突然意识到:动态类型在小项目里是自由,在大项目里就是灾难。
GitHub 上随便翻几个主流前端库——React、Vue、Ant Design、Element Plus——清一色用 TypeScript 重写。连 Vite 都默认生成 TS 模板了。再看看招聘网站,“熟练掌握 TypeScript” 已经不是加分项,而是入场券。
我不能再装睡了。
##二、30分钟上手:我的实战速成法(附真实踩坑记录)
别被吓到!TypeScript 并不是一门新语言,它只是 JavaScript 的超集。也就是说,所有合法的 JS 代码都是合法的 TS 代码。你完全可以先写 JS,再逐步加上类型。
下面是我那天晚上总结的“30分钟核心上手路径”,全是血泪经验:
1. 安装和初始化(2分钟)
# 全局安装(其实不推荐,建议用 npx)
npm install -g typescript
# 或者直接用 npx(更安全)
npx tsc --init
执行完会在根目录生成 tsconfig.json。别慌,先只改两个关键配置:
{
"compilerOptions": {
"target": "ES2020", // 编译到哪个JS版本
"module": "ESNext", // 模块系统
"strict": true, // 开启严格模式!必须开!
"esModuleInterop": true,
"skipLibCheck": true, // 跳过第三方库检查(初期救命)
"outDir": "./dist" // 输出目录
},
"include": ["src/**/*"]
}
开发心得:
strict: true是 TypeScript 的灵魂。不开它,等于没用 TS。虽然一开始会满屏红,但那是你在成长的信号。
2. 基础类型:别再用 any 了(5分钟)
// 字符串
let userName: string = "张三";
// 数字
let age: number = 28;
// 布尔值
let isActive: boolean = true;
// 数组
let hobbies: string[] = ["coding", "吃泡面"];
// 或者
let scores: Array<number> = [90, 85, 92];
// 对象(重点!)
interface User {
id: number;
name: string;
email?: string; // 可选属性
}
const user: User = {
id: 1,
name: "李四"
// email 可以不写
};
真实场景:在“码力全开”时,我们有个 API 返回用户信息,但有时候字段缺失。以前只能靠 if (user && user.profile && user.profile.avatar) 这种地狱式判断。现在用 interface + 可选属性 + 类型守卫,代码清爽多了。
3. 函数签名:让调用者一眼看懂(5分钟)
// 明确参数类型和返回值
function greet(name: string): string {
return `Hello, ${name}!`;
}
// 复杂点的
function fetchUser(id: number): Promise<User | null> {
// ...
}
吐槽时间:以前写函数,注释写得比代码还长:“注意!这个函数可能返回 null,也可能抛异常,也可能返回 {code: 500}……” 现在?类型系统自动告诉你一切。
4. 泛型:写出可复用的组件(8分钟)
这是我觉得 TS 最香的地方。举个前端天天见的例子——封装一个通用的请求函数:
// 不用泛型(JS时代)
function request(url) {
return fetch(url).then(res => res.json());
}
// 用了之后,调用方完全不知道返回啥结构!
// 用泛型(TS时代)
async function request<T>(url: string): Promise<T> {
const res = await fetch(url);
return res.json();
}
// 使用时
interface Post {
id: number;
title: string;
}
const posts = await request<Post[]>('/api/posts');
// posts 自动推断为 Post[] 类型!
开发心得:在 GitHub 上看开源项目,比如 axios 的源码,你会发现大量泛型应用。学会它,你就能看懂顶级项目的代码设计逻辑。
5. 类型守卫 & 联合类型:处理不确定性(5分钟)
现实世界的数据总是混乱的。比如后端返回的数据可能是成功也可能是错误:
type ApiResponse =
| { success: true; data: User[] }
| { success: false; error: string };
function handleResponse(res: ApiResponse) {
if (res.success) {
// TS 自动知道 res 是 { success: true; data: User[] }
console.log(res.data[0].name);
} else {
// 这里 res 是 { success: false; error: string }
alert(res.error);
}
}
真实踩坑:之前我们项目里有个状态字段叫 status,可能是 'loading' | 'success' | 'error' | 1 | 0 | null…… 后来加了联合类型约束,前端再也不怕后端乱改字段了。
6. 配置 VS Code + ESLint(5分钟)
最后一步,让开发体验起飞:
- 安装 VS Code 插件:TypeScript Hero(自动 import)、Error Lens(高亮错误)
- ESLint 配置加入
@typescript-eslint - 开启
"typescript.preferences.includePackageJsonAutoImports": "auto"
这样,当你输入 use,VS Code 会自动提示 useState 来自 react,并帮你 import。
三、从“会用”到“真香”:TypeScript 如何救了我的求职路
学完基础语法那天凌晨三点,我合上电脑,心里居然有点踏实。
接下来一周,我做了三件事:
- 把个人博客项目从 JS 重构成 TS(GitHub 地址:github.com/yourname/blog —— 别搜,是假的,但你可以建一个)
- 给开源项目提 PR:找了个 star 不多的小 UI 库,帮忙补了缺失的类型定义
- 面试时主动聊 TS:不再说“我会 React”,而是说“我用 TS + React 封装过通用表单组件,支持强类型校验”
奇迹发生了。
上周五晚上,一家做 SaaS 的 startup HR 打来电话:“看到你在 GitHub 上提交的类型定义,我们正好缺一个能规范前端工程化的开发者。” 薪资谈到了 22k(比上一份高 7k),还允许远程两天。
老婆听到后,终于笑了:“看来泡面钱没白花。”
四、给同样在挣扎的前端朋友几点真心话
TypeScript 不是银弹,但它是防弹衣
它不能保证你写出完美代码,但能避免 80% 的低级错误。尤其是在多人协作或长期维护的项目中,类型就是最好的文档。别追求一步到位
我见过太多人一开始就试图写完美的泛型工具类型,结果三天放弃。建议:先用interface定义你的 API 返回结构,这就解决了 60% 的痛点。GitHub 是你的练兵场
找个小项目 fork 一下,试着加类型。哪怕只是给一个函数加个返回值注解,也是进步。开源社区很欢迎这种 PR。运营你的技术影响力
把学习过程写成博客,发到掘金、知乎。我不是为了流量,而是为了逼自己理清思路。没想到后来面试官真的看过我写的《TS 踩坑记》。焦虑的时候,就敲代码
在天通苑这个“亚洲最大社区”里,每天有成千上万的人在焦虑房租、裁员、35岁危机。我能做的,就是在还能呼吸的时候,多学一点东西。因为技术,至少不会背叛你。
结语:在不确定的世界里,给自己多一点确定性
写这篇文章时,窗外又下起了北京春天常见的沙尘。我刚收到 offer 的邮件,下个月搬去回龙观,房租涨到 4200,但心里反而不慌了。
TypeScript 教会我的,不仅是如何写类型,更是如何用确定性对抗混沌。前端世界变化太快,框架月抛,API 日更,但类型思维是底层的、稳定的、可迁移的。
如果你也在经历失业、迷茫、自我怀疑,请相信:每一个深夜敲下的代码,都会在未来某个时刻,变成照亮你的光。
30分钟可能不够精通 TypeScript,但足够让你迈出第一步。而第一步,往往是最难也最重要的。
共勉。
—— 一个住在天通苑、刚找到新工作的前端,2024年4月于北京

评论 0