学TypeScript
Stack Overflow 2026 年的调查连续第九年把 TypeScript 排在「最受喜爱编程语言」首位,约 85% 的开发者表示想继续用它。可每当我跟真正开始学的人聊,大部分人描述的都是同一条轨迹:装好它、写几个接口、撞上「类型收窄」这堵墙,然后悄悄退回纯 JavaScript。问题不在 TypeScript 有多难,而是绝大多数教程把它教反了。它们一股脑地把泛型、工具类型、装饰器甩到你脸上,却还没让你内化那个能让一切都串起来的关键想法:TypeScript 是你 JavaScript 的类型检查器,而不是一个新的运行时。把这个心智模型放对位置,这门语言就不再像一套要死记的框架,而像一个带 X 光视线的超强 lint 工具。
TypeScript 到底是什么(以及不是什么)
TypeScript 会编译成纯 JavaScript。你在类型层面写的一切都不会真正发到浏览器、Node.js 或 Deno。这一件事就重塑了你该多快往下学:你不是在学第二个运行时、不是学一套新的控制流语法、也不是学一个对立的生态。你在学的是一层静态分析——在你打字的时候抓住错误。根据常见代码库的统计,大约 15% 的 bug(空解引用、参数个数不对、拼错的对象属性)会在运行前就被逮住。替你干这活的是 tsc,TypeScript 编译器,而它的报错信息是这个领域最接近「天赋型导师」的东西。

这个心智算法也影响你的节奏。如果你的目标是快速在 React 这类现代前端框架上干出活来,第一天根本不需要高级泛型。你需要的是:会注解函数参数、能建模一个 API 响应的形状,剩下的让推断去处理。TypeScript 的推断引擎确实很好:它会自己推出 const name = "Sam" 的类型是字面量类型 "Sam",而 arr.map(x => x.id) 会返回一个由 id 类型组成的数组。绝大多数日常代码几乎不需要显式注解,编译器会开心地帮你验证你写的东西一致性——这也是后台接口同学喜欢用它和Python 入门指南配合处理后端的原因。
能省掉最多挫败感的配置
大多数早期劝退都来自配置文件。教程自带的 tsconfig.json 对新手来说往往要么太严要么太松:要么抛出一堆吓人的错误,要么安静得「啥都没干」。一个务实的起步配置把 target 设成 "ES2022"、module 设成 "ESNext"(在没用 ESM 的 Node 上则设 "CommonJS"),而最关键的是一句 strict: true。严格模式不是惩罚,它正是让 TypeScript 的安全保证成真的东西。

最咬人的三个开关是 noImplicitAny(编译器推不出类型时逼你显式写明)、strictNullChecks(不再把 null 和 undefined 当成每个变量的合法值)和 noUnusedLocals。只要你开着 strict: true 并把冒出来的错误修掉,一周学到的东西比照抄宽松示例一个月还多。用 tsc --watch 跑监听模式,编辑就变成一个紧反馈环:每次保存都重查文件、就地打印错误。那条即时的红色下划线正是全部意义所在——TypeScript 正一条错误接一条错误地教会你,你的代码到底承诺了什么。配上 VS Code 内置的语言服务器,悬停就能预览推断类型,这是建立「这个函数返回 Promise,我得 await 它」直觉的最快方式。
一条贴合真实项目的学习路径
与其从头到尾背手册,我建议搭三个小项目,每个都逼你用特定的类型技能。项目一:命令行待办应用,你需要建模一个 Task 对象,并写一个排序数组的函数——这教会你联合类型、接口和数组泛型。项目二:基于 fetch 的天气应用,给公共 API 的 JSON 响应定义类型——这教会你定义贴合真实数据的接口、API 不确定时处理 any,以及写一个返回 Result 而非抛异常的函数。项目三:一个接受任意值类型的内存存储——这是你走进泛型的门,也是大家说 TypeScript「开始变好玩」的地方。注意缺了什么:你全程都没用到装饰器、命名空间,或把枚举卷进复杂推断规则里。那些可以等真需要了再学,TypeScript 官方手册也老实——多年把装饰器标注为「实验性」,现代指引也更鼓励普通函数和 as const 断言而非枚举魔法。

学那 20% 出现在 95% 真实代码里的语言,你一周内就能往真正的仓库里提交代码,而在我看来,开源贡献比任何课程都更能当老师。想补前端与工程基础,可以搭配本站的Web 开发入门一起读。
穿过基础之后仍然有用的工作流模式
基础打通后,下一步是采用普通 JavaScript 从不鼓励你的工作流。一是对环境变量的编译期校验:定义一个 Config 接口,在应用入口对 process.env 做校验,让配置错误快速而响亮地失败。二是用可辨识联合(discriminated union)干净地处理「几种事物中的一种」:一张可以是 card/bank/wallet 的支付对象,各自带不同属性,用一个共享的 type 字段让 TypeScript 在 switch 里正确收窄。这个模式干掉了整类运行时崩溃,也是你从 TS 带到任何强类型语言的、最可移植的一个点子。

第三个模式是 satisfies 运算符(TypeScript 4.9 引入):它让你校验一个对象是否符合期望形状,同时保留最具体的推断类型。经典例子是以路由名做键的配置记录——每个值里有个必须匹配签名的方法。邻接的 as const 同样关键,能把对象字面量冻结成字面量类型,把字符串键的拼写错误变成编译期报错,而不是静默的 undefined bug。还有两个面试和团队风格指南里必现的话题:unknown 与 any 的区别,以及怎么给返回 Promise 的函数做类型。any 直接关掉检查,几乎总是错的工具;unknown 逼你在用之前先证明值的形状——这正对应解析 API 返回的不可信 JSON 的现实。async 函数永远返回 Promise<T>,这单一心智模型就能覆盖大多数场景。想在面试里多一重保障,面试准备指南值得一并过一遍。
TypeScript 与其替代方案:按成本与契合度来选
TypeScript 不再是「编译到 JS、带类型」这一格里的唯一选项,明智的做法是刻意选择而不是默认。纯 JS 里的 JSDoc 类型注解让你在零构建步骤的情况下尝到检查的甜头,但它表达不了 TS 原生支持的泛型、接口和高级收窄。Flow 还在维护,可心智占有率早已崩塌,当年大部分团队早转投 TypeScript。Rescript 类型系统更简洁可预测,代价是放弃你早已熟悉的 JS 生态语法。对多数团队而言,TypeScript 仍是价值最高的选项——社区、工具链、编辑器集成和学习资料的体量都碾压对手。

| 平台 / 工具 | 核心特性 | 价格参考 |
|---|---|---|
| TypeScript(官方) | 静态类型检查、严格模式、泛型、可辨识联合、satisfies、全套 LSP | 免费、开源 |
| JSDoc + checkJs | 纯 JS 文件增量类型、零构建、适合遗留代码 | 免费,表达力有限 |
| Rescript | 简化类型系统、快编译器、无运行时 | 免费,语法学习曲线陡 |
| ts-node / tsx | Node 里直接跑 TS,开发无需单独构建 | 免费 |
对个人学习者来说,决策很快落地:直接用 strict: true 的纯 TypeScript。其余的一切要么是垫脚石、要么是专项工具。唯一真正重要的邻接选择是你的运行时。想更系统地从零搭起后端与工程视野,记得搭配本站的数据分析基础随时回炉练习。
常见问题
学 TypeScript 前需要先学好 JavaScript 吗?
强烈建议。TypeScript 是 JS 的类型层,不会替你解释变量提升、闭包或事件循环。先能熟练读写普通 JS,再加类型注解,能大幅降低早期挫败感。
strict: true 会不会吓跑新手?
一开始也许会在 null 上多踩几个坑,但容错模式养成的坏习惯很难改回来。大多数团队上线就是严格模式,尽早适应反而让你更贴近真实工程。
工作中 TypeScript 真的能减少 bug 吗?
能。统计上约 15% 的常见 bug(空引用、参数错位、属性拼错)会被编译器提前拦住。它不是银弹,但便宜的纠错绝对划算。
有必要一上来就连着框架一起学吗?
不必。先用纯 TS 做命令行小项目,把联合类型、接口、泛型这几个概念扎牢,再套进 React/Vue 会顺很多。相关对比也可以看看英文站的 learn programming in 15 minutes a day,帮你每天分配好学习节奏。
延伸阅读
想扩充工程能力的隔壁栏:javascript for beginners(英文)铺 JS 基础,UI 设计入门补前端美学,则有更多工具与效率向的内容供搭配。