请写一篇关于【TypeScript快速入门:30分钟上手指南】的技术文章

林智◇
2026-02-06 07:08
阅读 1187

去年十月,成都的秋天阴晴不定,我坐在青羊区一间月租3500的老破小里,盯着屏幕上最后一行 npm run build 的报错,心里五味杂陈。那天是我前公司倒闭的第17天,也是我投出第43份简历后,第一次收到 HR 的回复:“你有 TypeScript 经验吗?我们技术栈是 React + TS。”

我苦笑了一下——我当然“有”啊。毕竟在那个只活了11个月的创业公司,我每天都在和 any 搏斗,试图让一个用 React 写的、号称要颠覆设计师工具市场的 Moltbot(对,就是那个后来被 Lovable 抄得连 UI 都懒得改的项目)跑起来。

但说实话,我那时候对 TS 的理解,大概停留在“能加个类型注解显得代码很高级”的程度。真正的类型安全?泛型约束?联合类型推导?对不起,我还在用 //@ts-ignore 来骗过编译器。


一、从“any 大法好”到“TS 救我狗命”

事情得从2022年说起。那会儿我在一家叫“像素引擎”的创业公司做前端,团队就三个人:一个CTO兼后端,一个UI妹子,还有我这个“全栈前端”(其实就是啥都得干)。项目目标很宏大:做一个类似 Figma 的在线设计工具,名字叫 Moltbot。听起来是不是有点耳熟?没错,后来 Lovable 出来的时候,我差点以为是我们项目复活了——结果人家融了 A 轮,我们连工资都发不齐。

当时技术选型很草率。CTO说:“React 吧,生态好。”我说:“行。”他又说:“要不要上 TS?”我想了想,说:“上吧,简历好看。”于是我们就上了。但问题是——没人真懂 TS。

第一天写组件,我给 props 加了个 interface:

interface ButtonProps {
  label: string;
  onClick: () => void;
}

看起来挺专业。但第三天,产品需求变了,要支持图标、加载状态、禁用样式……我开始疯狂往 interface 里塞字段。到第两周,这个 interface 已经膨胀到12个可选属性,其中6个是 any

为什么?因为时间紧、任务重、老板天天催 MVP。谁有空去研究 Partial<T> 或者 Pick<T, K>?反正本地跑起来就行,CI 过不了就加 //@ts-ignore。到最后,我们的代码库里,any 出现的频率比 console.log 还高。

我老婆有次看我加班到凌晨两点,问我:“你们这项目靠谱吗?”
我说:“应该……吧?至少代码能跑。”
她冷笑:“能跑就行?那你自行车也能跑,咋不去送外卖?”

扎心了。


二、公司倒了,但 TS 没倒

去年9月,公司资金链断裂。最后一次全员会议,老板红着眼说:“兄弟们,我对不起大家。”那天我没哭,但回家路上在地铁上刷招聘软件,看到清一色写着“熟练使用 TypeScript”、“有 React + TS 项目经验优先”,我才真的慌了。

我月薪15k,在成都勉强够活,但失业后连房租都成问题。更可怕的是,我发现我根本没法证明自己“会 TS”。我的 GitHub 仓库里全是 any//@ts-ignore,面试时被问到“如何处理异步数据的类型定义”,我支支吾吾说了个 Promise<any>,面试官眼神都变了。

那一刻我意识到:我并不是不会 TS,我只是把 TS 当成了装饰品,而不是武器。

于是,我决定花30小时,重新学一遍 TypeScript。不是那种“Hello World”式的教程,而是真正能用在 React 项目里的实战知识。目标很明确:30分钟能上手,30小时能干活。


三、30分钟上手指南:给 React 开发者的 TS 急救包

别被吓到,TS 没那么难。尤其是你已经会 React。下面这些,是我用血泪换来的“速成清单”,保证你30分钟内能写出像样的 TS 代码。

1. 从 interface 开始,别碰 type(初期)

很多新手一上来就搞 type User = { name: string } | null,结果把自己绕晕。先用 interface 定义组件 props 和 state:

interface UserProfileProps {
  id: number;
  name: string;
  avatar?: string; // 可选
}

💡 小技巧:在 React 组件里,直接用 FC<UserProfileProps>(FunctionComponent 的缩写),VS Code 会自动提示。

2. 别再用 any!用 unknown + 类型守卫

以前我图省事,API 返回的数据一律 any。现在我知道了——这是给自己埋雷。

正确做法:

const fetchUser = async (): Promise<unknown> => {
  const res = await fetch('/api/user');
  return res.json();
};

// 使用时做类型检查
const user = await fetchUser();
if (typeof user === 'object' && user && 'name' in user) {
  console.log((user as { name: string }).name);
}

或者更优雅地,用 Zod 或 Yup 做运行时校验——但这属于进阶内容,30分钟内先掌握基础。

3. 泛型不是玄学,它是“模板函数”

我在 Moltbot 里写过一个通用 Modal 组件,传什么内容都行。以前用 children: React.ReactNode,但无法约束回调参数类型。

现在我会这样:

interface ModalProps<T> {
  isOpen: boolean;
  data: T;
  onClose: (result: T) => void;
}

function Modal<T>({ isOpen, data, onClose }: ModalProps<T>) {
  return isOpen ? (
    <div onClick={() => onClose(data)}>...</div>
  ) : null;
}

调用时:

<Modal<{ id: number }> 
  data={{ id: 123 }} 
  onClose={(res) => console.log(res.id)} 
/>

看,res.id 有类型提示!再也不用猜字段名了。

4. 工具类型:你的 TS 外挂

  • Partial<T>:让所有属性可选(适合表单初始值)
  • Pick<T, 'a' | 'b'>:只取部分属性
  • Omit<T, 'password'>:排除敏感字段
  • Record<string, any>:动态对象(慎用,尽量指定 value 类型)

比如我们在 Moltbot 里有个画布配置对象,不同工具需要不同配置。用 Record + 联合类型就能搞定:

type ToolType = 'pen' | 'eraser' | 'text';

interface PenConfig { size: number; color: string }
interface EraserConfig { radius: number }

type ToolConfig = {
  pen: PenConfig;
  eraser: EraserConfig;
  text: { font: string };
};

const config: Record<ToolType, any> = { ... }; // 这里其实该用映射类型,但30分钟先这样

⚠️ 安全提醒:别滥用 Record<string, any>!它等于放弃类型安全。尽量用明确的 key 和 value 类型。


四、Lovable 给我的启示:工具再好,也得人会用

最近我试用了 Lovable ——那个长得和 Moltbot 一模一样的竞品。他们的编辑器体验确实流畅,错误提示友好,甚至支持实时协作。但你知道最让我震撼的是什么吗?

他们的代码开源了一部分,我扒了下,发现他们严格禁用 any,CI 流程里有 tsc --noEmit 校验,连 commit message 都要求写清楚类型变更。

而我们呢?为了赶上线,把 strict: false 写死在 tsconfig 里,还美其名曰“敏捷开发”。

差距不在技术,而在态度。


五、现在的我:从“能跑就行”到“类型先行”

上个月,我入职了一家新公司,做内部低代码平台,技术栈 React + TS + Vite。面试时,我坦白说了前公司的经历,还展示了我重写的 Moltbot 核心模块(用 TS 重构版)。HR 问我期望薪资,我说:“22k,不能再低了。”
她笑了笑:“可以,我们正缺你这种踩过坑的人。”

现在,我写组件前一定会先写 interface。API 请求回来的数据,一定用 Zod 校验。团队 code review 时,如果看到 any,会被全组嘲笑。

但我不觉得丢人。因为我知道,每一个 any 背后,都是一个可能在生产环境爆炸的定时炸弹。


六、给成都前端兄弟的真心话

如果你也在成都,拿着15k左右的工资,觉得“TS 学了也没用,反正项目赶进度”,我想说:别骗自己了。

成都生活成本是低,但机会也少。大厂外包岗卷成麻花,创业公司九死一生。唯一能让你跳出这个循环的,就是扎实的技术护城河。而 TypeScript,就是 React 开发者最容易筑起的一道墙。

30分钟,真的够你上手。不需要成为 TS 专家,但至少做到:

  • 不用 any
  • 组件 props 有明确类型
  • API 数据做基础校验

这三点,就能让你在面试时甩开80%的竞争者。


结语:类型安全,是一种职业尊严

Moltbot 倒了,但那段经历没白费。它教会我:代码能跑,只是最低标准;代码可维护、可协作、可信任,才是工程师的价值。

TypeScript 不是银弹,但它是一面镜子——照出你对代码的态度。

所以,别再把 TS 当成简历上的装饰词了。打开你的 VS Code,删掉那些 //@ts-ignore,从一个简单的 interface 开始。

30分钟后,你会感谢今天的自己。

(完)

P.S. 如果你在成都,也在找靠谱的前端岗,欢迎私信。我们团队正在招人,要求不高:会 React,愿意写 TS,能接受偶尔加班——但绝不允许用 any

评论 0

最热最新
暂无评论
林智◇Lv.1
0
影响力
0
文章
0
粉丝