TypeScript 介绍
TypeScript 产生背景
JavaScript 被设计为一种动态类型语言,变量没有固定的类型。这在小项目中很灵活,但随着项目规模变大,问题逐渐暴露出来。
如果你写过 JavaScript,大概率遇到过这样的场景:调用一个函数时传错了参数,代码跑起来才报错,而写代码时没有任何提示。
这种 “运行时才能发现错误” 的体验,正是 TypeScript(TS) 要解决的核心问题。
下面这段代码就是一个典型例子:
// JS 版本——你永远不知道调用方会传什么
function greet(user) {
return "Hello, " + user.name;
}
greet(null); // 💥 运行时报错
greet({ age: 18 }); // 💥 运行时报错,没有 name
而 TypeScript 能在编写代码时就拦截这些错误:
// TS 版本——明确告诉调用方:必须传一个包含 name 的对象
function greet(user: { name: string }): string {
return "Hello, " + user.name;
}
greet(null); // ❌ 编译时报错,连代码都跑不起来
greet({ age: 18 }); // ❌ 编译时报错,缺少 name
类似的问题还有很多:
| 问题 | 说明 |
|---|---|
| 类型错误难以提前发现 | 只有运行到那行代码才会报错 |
| 函数签名不明确 | 看函数定义,不知道参数应该传什么、返回什么 |
| 重构风险高 | 修改一个函数,无法知道哪些地方调用了它、是否兼容 |
| IDE 支持弱 | 没有类型信息,编辑器无法提供精准的自动补全和跳转 |
TS 和 JavaScript 的区别
TypeScript 是一门基于 JavaScript 之上构建的编程语言,是 JavaScript 的超集(Superset)。
这句话有两个关键含义:
- 所有合法的 JavaScript 代码,都是合法的 TypeScript 代码。把
.js改成.ts,直接就能用。 - TypeScript 在 JavaScript 的基础上增加了类型系统和其他语言特性。
官方定义是:TypeScript = JavaScript + 类型系统 + 现代语言特性
提现在开发视角,两者最大区别是:JS 把错误留给了运行时(用户可能遇到白屏);TS 在写代码时就告诉你错了。
TS 成长历程
| 时间 | 事件 |
|---|---|
| 2010 | 微软内部启动 TypeScript 项目 |
| 2012.10 | 首个公开版本(0.8)发布 |
| 2014.04 | TypeScript 1.0 发布,迁移至 GitHub |
| 2018 | 全球开发者调查中,TS 成为最受欢迎的语言之一 |
| 2020+ | 主流框架(React/Vue/Angular)全面支持 TS,成为默认选项 |
如今,TypeScript 已是前端开发的主流选择,Node.js、Deno、Bun 等后端/运行时环境也原生支持 TS。
TS 设计理念
类型系统是”可选的”
TypeScript 不强制你为每一行代码都标注类型。你可以只为关键部分加类型,其余的让 TypeScript 自动推断,也可以用 any 临时”跳过”检查。
这种渐进式的设计,让 JS 项目可以平滑地迁移到 TS。(类型注解与类型推断的详细对比会在后续章节展开)
只存在于编译时,运行时“零成本”
TypeScript 的类型系统只在编译阶段生效,编译后的 JavaScript 代码中不包含任何类型信息。
// TypeScript 源码
function add(x: number, y: number): number {
return x + y;
}
编译后:
// 编译后的 JavaScript
function add(x, y) {
return x + y;
}
所有的类型注解都被擦除了,没有额外的运行时开销,你的代码跑起来和原来一样快。
拥抱 ECMAScript 标准
TypeScript 的设计原则是紧跟 ECMAScript(JavaScript 的官方标准)的发展。它不会发明与标准冲突的语法,而是在标准之上做加法。
这意味着:
- 你学到的 TypeScript 知识,大部分也适用于 JavaScript 的未来版本
- 你可以放心使用最新的 JS 特性(如
async/await、装饰器),TypeScript 会帮你编译到更低版本
TS 解决了什么问题
| 问题 | JavaScript | TypeScript |
|---|---|---|
| 类型错误 | 运行时才发现 | 编译时就拦截 |
| 函数签名 | 看代码才知道怎么用 | 看类型定义就知道 |
| IDE 提示 | 有限的自动补全 | 精准的智能提示、跳转、重构 |
| 重构代码 | 手动搜索所有调用处 | 类型系统帮你找出所有不兼容的地方 |
| 团队协作 | 靠文档和口头沟通 | 类型即文档,编译器当队友 |
一句话总结:TypeScript 让 JavaScript 具备了“大型工程”的开发能力。