首页 / TypeScript 入门教程 / TypeScript 是什么

TypeScript 入门教程

TypeScript 是什么

本教程共 80 篇 · 第 1 篇 · 更新于 2026-08-10 · 约 11 分钟阅读

TypeScriptTypeScript 入门教程入门简介类型系统静态类型

本节目标:搞清楚 TypeScript 从哪来、解决了什么问题、跟 JavaScript 是什么关系。学完你能向别人清晰地解释”为什么要在项目里用 TypeScript”。

一个真实的故事

先讲个故事——并不是为了吓唬你。

Boris 是一家电商公司的前端工程师。双十一前几天,他改了一个购物车计算价格的函数,改了参数顺序。测试跑了一遍,线上也上了。零点一到,订单系统崩了。

原因?那个函数有 300 多处调用,其中 3 处参数顺序跟新版本不一致。JavaScript 没报任何错,直到用户在支付页面看到 NaN。

Boris 的后半夜,就是在找那 3 个调用里度过的。

这不是 Boris 的问题——这暴露的是动态类型语言在大型项目里的软肋。函数签名改了,没有任何东西告诉你”这里需要更新”。你只能靠记忆、靠 grep、靠祈祷。

TypeScript 就是来回答这个问题的。

JavaScript 的超集

用一个简单的公式理解 TypeScript:

TypeScript = JavaScript + 类型系统

所谓”超集”,就是所有合法的 JavaScript 代码,同时也是合法的 TypeScript 代码。你可以把一个 .js 文件直接改名为 .ts,它就能编译通过——当然,可能会有一些类型警告,但不会卡死你。

这个设计很精妙。它意味着你不需要一次性把整个项目重写为 TypeScript,可以渐进式迁移:先把一个文件改成 .ts,给它加上类型注解,跑通之后再改下一个。

TypeScript 的目标不是取代 JavaScript,而是给 JavaScript 装上一张安全网。就像自行车装上了辅助轮——你可以随时拆掉它,但在你想安全地骑快的时候,它一直都在。

静态类型的价值

JavaScript 是一门动态类型语言。变量的类型在运行时才确定,这意味着:

// JavaScript:运行时才会暴露问题
function calculateDiscount(price, rate) {
  return price * (1 - rate);
}

calculateDiscount(100, "0.2");  // 返回 80,因为你传错了类型
calculateDiscount("100");       // 返回 NaN,因为拿一个字符串去参与运算

一个函数接受什么参数、返回什么值——这些信息对 JavaScript 来说全是”到时候再说”。在几十行的脚本里这不是问题,但在几十万行的项目里,每一次调用都是一次潜在的雷。

TypeScript 的做法是把类型检查提前到编译阶段

// TypeScript:还没跑代码就告诉你这里有问题
function calculateDiscount(price: number, rate: number): number {
  return price * (1 - rate);
}

calculateDiscount(100, "0.2");
// 编译错误:Argument of type 'string' is not assignable to parameter of type 'number'.

你看,同样的错误,JavaScript 要等到用户操作时才暴露(或者更糟:返回一个 NaN 但没报错,数据就这样默默地错了下去);TypeScript 在你写代码的时候就告诉你——“这里有个 string,但我需要 number,你检查一下”。

静态类型的三大好处:

  1. 编译期纠错:拼写错误、类型不匹配、参数数量不对——这些低级 bug 在代码还没跑的时候就截住了。
  2. 智能提示:IDE 知道你每个变量的类型,所以能给你精准的自动补全。敲 user. 后面列出的每个属性和方法都是真实可用的,不是猜的。
  3. 安全重构:改一个函数名、改一个参数类型,编译器会自动追踪所有引用位置告诉你哪里需要同步修改。重构不再是”改一处,烧三柱香”。

谁在用 TypeScript

TypeScript 已经在业界铺得非常广了。几个标志性事件:

  • Angular 从 2.0 起就用 TypeScript 作为官方语言,所有文档、CLI 都默认输出 TypeScript。
  • Vue 3 的核心代码用 TypeScript 重写,组合式 API 对 TypeScript 兼容极好。
  • VS Code 本身就用 TypeScript 编写——相当于用自己编译自己。
  • DenoBun 两个现代 JS 运行时都内置 TypeScript 支持,.ts 文件可以直接跑。
  • 2022 年 State of JS 调查中,TypeScript 的使用率与满意度持续位居前列。

简单来说:你在 2026 年打开一份正经的 JavaScript 项目,十有八九用的是 TypeScript。

演进简史

TypeScript 的故事要从 2012 年说起。微软内部有一个叫 Anders Hejlsberg 的人——C# 的首席架构师,也是 Turbo Pascal 和 Delphi 的创造者。他在 2010 年左右着手设计一门新语言,目标只有一个:在不破坏 JavaScript 兼容性的前提下,引入静态类型。

2012 年 10 月,TypeScript 0.8 公开发布。当时 Windows 8 即将发布,微软想让 .NET 程序员也能用 HTML + JavaScript 开发应用,TypeScript 就是这座桥。

后来几个关键节点:

时间版本关键变化
20141.0第一个正式稳定版,引入类、接口、模块
20162.0引入 strictNullChecks,类型安全大幅升级
20183.0项目引用(Project References),支持 monorepo
20204.0可变元组、标记元组,编辑器体验飞跃
20235.0标准化装饰器,const 类型参数
2025–20266.0 → 7.0用 Go 重写编译器(代号 Corsa),性能提升约 10 倍

7.0 是这个教程的基线版本。它是 TypeScript 历史上最大的工程变更——整个编译器从 JavaScript 移植到了 Go 语言,但语言语法和类型系统完全不变。对写代码的你来说,唯一的感受就是:快了,快了很多。

TypeScript 不适合什么

说了这么多好处,也得诚实地说说它不擅长的场景:

  • 一次性小脚本:写个几行代码处理文件,加类型注解反而拖慢节奏。
  • 快速原型:你在两天内反复推翻好几版,类型系统的维护成本可能会超过收益。
  • 团队还没准备好:如果团队里没人熟悉 TypeScript,强行推会有一段磨合期。

TS 的核心价值在于”可维护性”,如果这个项目压根不需要长期维护,用纯 JavaScript 完全没问题。

接下来

好的,故事讲完了。你对 TypeScript 有了一个全局的认识——它从哪来、解决什么、跟 JS 什么关系。

下一章,我们动手把它装上。

上一篇
已经是第一篇啦
下一篇
安装与环境配置