📘 TypeScript 发展史
从 2012 年至今,TypeScript 的演进历程与重大版本特性
📜 TypeScript 由微软开发,于 2012 年首次发布。它为 JavaScript 添加了静态类型系统,帮助开发者在编译时发现错误,提高代码质量和可维护性。本页面记录了 TypeScript 每个主要版本引入的新特性、改进以及解决的问题。
TypeScript 1.0
2014 年 4 月
重大发布
核心特性
- 类型注解(Type Annotations)
- 接口(Interfaces)
- 类(Classes)
- 模块(Modules)
- 泛型(Generics)
- 联合类型(Union Types)
解决的问题
❌ JavaScript 是动态类型语言,大型项目中容易出现类型错误
✅ TypeScript 提供静态类型检查,在编译时发现类型错误
TypeScript 1.1
2014 年 10 月
小版本
主要改进
- 编译器性能提升(速度提升 4 倍)
- 改进的类型推断
- 支持外部模块
TypeScript 1.3
2015 年 7 月
小版本
新增特性
- 访问修饰符(public/private/protected)
- 计算属性名
- 类型守卫(Type Guards)
TypeScript 1.5
2015 年 9 月
重要更新
ES6 支持
- let / const
- 解构赋值
- 展开运算符(...)
- for...of 循环
- 模块语法(import/export)
- 目标代码生成(ES3/ES5/ES6)
TypeScript 1.8
2016 年 2 月
小版本
新增特性
- 字符串字面量类型
- 控制流分析(Control Flow Analysis)
- 改进的类型推断
- 支持 JSX/React
解决的问题
❌ 无法精确描述某些值的类型(如特定字符串)
✅ 字符串字面量类型允许精确指定字符串值
TypeScript 2.0
2016 年 9 月
重大发布
核心特性
- 严格空值检查(--strictNullChecks)
- 只读属性
- 区分参数属性
- 控制流类型分析增强
- never 类型
解决的问题
❌ null 和 undefined 导致的运行时错误("Cannot read property of undefined")
✅ 严格空值检查强制显式处理 null/undefined
TypeScript 2.1
2016 年 11 月
小版本
新增特性
- 对象展开运算符
- keyof 运算符
- 映射类型(Mapped Types)
- 改进的字面量类型推断
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
TypeScript 2.2
2017 年 2 月
小版本
新增特性
- 混合类型(Intersection Types)
- 对象字面量改进
- JSX 属性改进
TypeScript 2.3
2017 年 4 月
小版本
新增特性
- 泛型参数默认值
- 索引类型改进
- 严格模式选项(--strict)
interface Response<T = any> {
data: T;
status: number;
}
TypeScript 2.4
2017 年 6 月
小版本
新增特性
- 字符串枚举(String Enums)
- 动态导入表达式
- 泛型类型推断增强
TypeScript 2.5
2017 年 8 月
小版本
新增特性
- 独占类型检查(Exhaustive Checks)
- JSDoc 类型推断
- import 重命名
TypeScript 2.6
2017 年 10 月
小版本
新增特性
- 严格函数类型检查(--strictFunctionTypes)
- 局部类型推断
- 枚举改进
TypeScript 2.7
2018 年 1 月
小版本
新增特性
- 唯一符号属性(unique symbol)
- 元组类型改进
- 智能选择检测
- 类字段语法支持
TypeScript 2.8
2018 年 3 月
小版本
新增特性
- 条件类型(Conditional Types)
- 预处理器指令
- 改进的 JSX 支持
type Extract<T, U> = T extends U ? T : never;
解决的问题
❌ 无法根据类型条件动态计算类型
✅ 条件类型允许根据类型关系进行类型分支
TypeScript 2.9
2018 年 5 月
小版本
新增特性
- 泛型类型参数
- 数字和符号属性名
- import 类型
TypeScript 3.0
2018 年 7 月
重大发布
核心特性
- 剩余参数(Rest Parameters)
- 元组类型改进
- 项目引用(Project References)
- 错误处理改进
// 剩余参数
type Props<T> = T & { children?: React.ReactNode };
// 元组标签
type Tuple = [number, string, ...boolean[]];
TypeScript 3.1
2018 年 8 月
小版本
新增特性
- 映射类型改进
- 函数属性推断
- React 支持改进
TypeScript 3.2
2018 年 11 月
小版本
新增特性
- 严格元组检查
- bigint 支持
- 对象字面量改进
TypeScript 3.3
2019 年 1 月
小版本
主要改进
- 构建性能提升
- 联合类型索引改进
TypeScript 3.4
2019 年 3 月
小版本
新增特性
- const 断言(const assertions)
- 泛型类型推断改进
- ESM 模块支持
const arr = [1, 2, 3] as const;
// 类型:readonly [1, 2, 3]
解决的问题
❌ 数组和对象字面量类型推断过于宽泛
✅ const 断言保留字面量的精确类型
TypeScript 3.5
2019 年 5 月
小版本
新增特性
- Omit 工具类型
- 联合类型检查改进
- 构建性能提升
TypeScript 3.6
2019 年 8 月
小版本
新增特性
- 迭代器改进
- 生成器支持改进
- API 性能提升
TypeScript 3.7
2019 年 11 月
小版本
新增特性
- 可选链(Optional Chaining)
- 空值合并运算符(Nullish Coalescing)
- 断言函数(Assertion Functions)
- 递归类型引用
// 可选链
const name = user?.profile?.name;
// 空值合并
const value = input ?? 'default';
解决的问题
❌ 深层嵌套属性访问需要多层 null 检查
✅ 可选链简化空值检查,空值合并提供默认值
TypeScript 3.8
2020 年 2 月
小版本
新增特性
- 类型导入/导出(import type)
- ECMAScript 私有字段
- JSDoc 类型推断改进
import type { SomeType } from './module';
class Person {
#name: string;
}
TypeScript 3.9
2020 年 5 月
小版本
主要改进
- 性能优化
- Promise.allSettled 支持
- 注释保留改进
TypeScript 4.0
2020 年 8 月
重大发布
核心特性
- 可变参数元组(Variadic Tuple Types)
- 类属性推断
- 构造参数属性
- 模板字面量类型
// 可变参数元组
type Tuple<T, U extends any[]> = [T, ...U];
// 模板字面量类型
type EventName = 'click' | 'hover' | 'tap';
type Handler = `on${Capitalize<EventName>}`;
TypeScript 4.1
2020 年 11 月
小版本
新增特性
- 模板字面量类型增强
- 键映射类型
- 递归条件类型
- 检查索引访问
type Greeting = `Hello, ${string}`;
TypeScript 4.2
2021 年 2 月
小版本
新增特性
- 元组和数组类型改进
- in 操作符类型守卫
- 捕获剩余元组元素
TypeScript 4.3
2021 年 5 月
小版本
新增特性
- 独立的 get/set 类型
- override 修饰符
- 模板字面量类型改进
- 静态索引签名
TypeScript 4.4
2021 年 8 月
小版本
新增特性
- 控制流分析改进
- 自动访问器类型推断
- 符号模板类型
TypeScript 4.5
2021 年 11 月
小版本
新增特性
- 等待类型(Awaited)
- 私有字段存在检查
- 模板字面量类型改进
- lib.d.ts 拆分
type PromiseResult<T> = Awaited<Promise<T>>;
// 类型:T
TypeScript 4.6
2022 年 3 月
小版本
新增特性
- 区分重载检查
- 模板字符串推断改进
- 移除未使用变量
TypeScript 4.7
2022 年 5 月
小版本
新增特性
- 模块检测(moduleDetection)
- infer 类型约束
- 对象展开改进
- ESM 支持改进
type FirstString<T extends any[]> =
T extends [infer S extends string, ...any[]] ? S : never;
TypeScript 4.8
2022 年 8 月
小版本
新增特性
- 交叉类型简化
- 模板字符串类型改进
- 自动绑定 this
TypeScript 4.9
2022 年 11 月
小版本
新增特性
- satisfies 运算符
- 自动访问器
- 类型窄化改进
const config = {
port: 3000,
host: 'localhost'
} satisfies { port: number; host: string };
// 保留字面量类型,同时检查类型
解决的问题
❌ 类型断言会丢失字面量类型信息
✅ satisfies 检查类型同时保留精确类型
TypeScript 5.0
2023 年 3 月
重大发布
核心特性
- 装饰器(Decorators)
- const 类型参数
- 导出类型重命名
- 性能优化
// 装饰器
function logged(target: any, propertyKey: string) {
// ...
}
class Service {
@logged
getData() {}
}
// const 类型参数
function createTuple<const T>(arr: T[]) {
return arr as Readonly<T>;
}
解决的问题
❌ 装饰器提案多次变更,TypeScript 实现不一致
✅ 实现 TC39 Stage 3 装饰器提案
TypeScript 5.1
2023 年 5 月
小版本
新增特性
- 泛型类型参数改进
- JSX 子组件类型推断
- 性能优化
TypeScript 5.2
2023 年 8 月
小版本
新增特性
- using 声明
- 显式资源管理
- 装饰器改进
using file = openFile('test.txt');
// 自动调用 file[Symbol.dispose]()
TypeScript 5.3
2023 年 11 月
小版本
新增特性
- import 属性
- 类型导入推断改进
- 性能优化
TypeScript 5.4
2024 年 3 月
小版本
新增特性
- NoInfer 工具类型
- 闭包类型推断改进
- 性能优化
function getValue<T>(
value: T,
callback: (arg: NoInfer<T>) => void
) {
callback(value);
}
解决的问题
❌ 泛型推断时某些位置不应该参与推断
✅ NoInfer 阻止特定位置的类型推断
TypeScript 5.5
2024 年 6 月
小版本
新增特性
- const 变量窄化
- Promise 与 async/await 改进
- lib 分离改进
- 性能优化
TypeScript 5.6
2024 年 9 月
小版本
新增特性
- 更精确的闲置检查
- 支持 @link 标签
- 性能优化
TypeScript 5.7
2024 年 11 月
小版本
新增特性
- import 属性改进
- 类型推断性能优化
- 错误消息改进
📊 版本演进总结
12+
年发展历程
50+
主要版本发布
8
重大版本更新
200+
新特性引入