六维教程

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 具备了“大型工程”的开发能力。

上一篇
TypeScript 教程
下一篇
TypeScript 环境搭建