TypeScript
定义
TypeScript 是由微软主导设计的编程语言,定位为 JavaScript 的超集(superset)。它继承了 JavaScript 的全部语法,在此之上补充类型标注、接口、类、模块等结构,最终由编译器输出符合标准的 JavaScript 代码,因此浏览器与 Node.js 等运行环境都不需要为它做任何改动[1]。项目负责人安德斯·海尔斯伯格(Anders Hejlsberg)在发布时强调,所有 JavaScript 代码本身就是 TypeScript 代码,既有的 JavaScript 库可以直接使用[1]。
它与 JavaScript 的关系常被概括为“增强”而非“替代”:语言并不打算另起一套运行时,而是让原本动态类型的脚本语言获得可供编译器校验的类型信息[3]。编译器同时承担两项职责,一是在构建阶段检查类型错误,二是在擦除类型后生成目标版本的 JavaScript[4]。
原理
TypeScript 的核心是静态类型系统。开发者为变量、函数参数和返回值写出类型,编译器据此在不运行程序的情况下推断各处表达式是否合法,把拼写错误、类型不匹配、属性不存在等问题提前暴露出来。与许多基于名义类型的语言不同,它采用结构类型(structural typing),只要两个值的形状满足要求就视为兼容,因此接口更像是一份形状描述而非运行时的类型标签[5]。
编译流程可以概括为读入源文件、做类型检查、再输出 JavaScript:$\text{.ts} \rightarrow \text{类型检查} \rightarrow \text{.js}$。类型信息只存在于分析与工具环节,输出结果中已被完全擦除,因此运行时不会保留任何类型数据,也不会因为类型标注而变慢[4][1]。项目编译行为由 tsconfig.json 配置,可选开启严格模式等开关来收紧张量检查[6]。
对于没有用 TypeScript 编写的第三方库,社区通过 .d.ts 声明文件描述其对外形态,使类型检查与代码补全仍能覆盖这些依赖[7]。这些声明只提供类型信息、不含实际逻辑,可在不修改原库的前提下补齐类型[7]。
发展历程
微软工程师在此前约 2 年里着手解决大规模 JavaScript 难以维护的问题,并于 2012 年 10 月 1 日公开 TypeScript 的开发者预览版,同时发布语言规范与开源的编译器源码,采用 Apache 2.0 许可[8]。早期版本把当时尚在讨论的 ECMAScript 6 中的类、模块等提案引入语言,并提供 Visual Studio 2012 插件[1][8]。
2014 年随 Visual Studio 2013 Update 2 发布的 1.0 版本,使 TypeScript 成为 Visual Studio 内置语言,不再需要单独下载安装[9]。2016 年 9 月 22 日推出的 2.0 版本增加了非空类型、控制流分析类型、只读修饰符与 never 类型等特性,并简化了声明文件的获取方式[10]。同期谷歌在 Angular 2 框架的开发中与微软合作,推动了该语言在框架生态中的采用[10]。
2023 年发布的 5.0 版本以更小、更简单、更快为目标,加入可变元组类型、映射类型的键重映射、装饰器标准支持,并把所有枚举按联合枚举处理,同时新增 verbatimModuleSyntax 等编译选项。据 GitHub 的年度开发者报告,2025 年 8 月 TypeScript 以约 263.6 万名月度贡献者首次超过 Python,成为该平台上贡献者数量最多的语言,报告把默认采用 TypeScript 的框架与 AI 辅助编程列为推动因素[11]。
应用
TypeScript 的典型用途是构建规模较大的前端与服务器端应用。由于编译产物就是标准 JavaScript,浏览器、Node.js 以及各类云平台都能直接运行,无需专用的运行时或虚拟机[2][1]。它还被用于开发工具本身,微软的 Monaco 编辑器、Xbox Music 的新界面、必应(Bing)的部分项目以及 Visual Studio Code 编辑器均以 TypeScript 编写[9]。
主流框架对该语言的支持是另一处落点。Next.js 15、Astro 3、SvelteKit 2、Angular 18 与 Remix 等框架在创建项目时默认生成 TypeScript 代码库,Vite、ts-node、Bun 等工具则简化了运行与构建步骤[11]。此外,类型信息也被用于增强编辑体验,代码补全、跳转定义与重构等能力都依赖编译器给出的类型数据[2]。
局限
类型检查只在编译阶段发生,一旦代码被转换为 JavaScript,所有类型标注都会被擦除,运行时无法依据类型判断某个值是否合规[4]。因此从接口、文件或第三方系统进入程序的数据,其实际类型仍可能与声明不符,需要在边界处自行校验[12]。
该语言的类型系统也不是健全的(sound)。官方设计目标明确不追求“可证明正确”的类型系统,而是在正确性与开发效率之间取平衡,于是存在能通过编译却在运行时出错的写法[12]。any 类型会进一步绕过检查,若大量使用,静态类型带来的保障会被削弱[12]。
工程上还需承担额外成本。项目要多一道编译或构建环节,开发者需为接口、泛型、枚举等概念付出学习时间,并编写维护类型标注;与部分未提供类型信息的库结合时也需要额外适配工作。有从业者还指出,其类型推断能力相对有限,遇到依赖注入或复杂泛型时往往需要显式标注[13]。
参见
-
JavaScript —— TypeScript 所基于并最终编译输出的脚本语言。
-
编译器 —— 负责检查类型并将 TypeScript 转换为 JavaScript 的工具。
-
ECMAScript —— JavaScript 所依据的标准,TypeScript 的类、模块等语法多源自其草案。
-
Visual Studio Code —— 以 TypeScript 编写、并内置其语言支持的编辑器。
-
类型系统 —— TypeScript 在 JavaScript 之上补充的静态检查机制。
参考资料
- Microsoft augments JavaScript for large-scale development [引用日期2026-10-29]
- 快速瞭解 TypeScript 是什麼東西 [引用日期2026-10-29]
- What is TypeScript? - Get the ITPro daily newsletter [引用日期2026-10-29]
- TypeScript 编译器有两个主要职责:检查类型错误和编译为 JavaScript [引用日期2026-10-29]
- TypeScript 不是一种编程语言? [引用日期2026-10-29]
- SKILL [引用日期2026-10-29]
- Typescript:在d.ts文件中使用枚举时生成构建错误 [引用日期2026-10-29]
- zdnet.com 上的网页 [引用日期2026-10-29]
- zdnet.com 上的网页 [引用日期2026-10-29]
- eweek.com 上的网页 [引用日期2026-10-29]
- TypeScript超越Python成GitHub上使用最广语言,AI是主要驱动力-36氪 [引用日期2026-10-29]
- TypeScript被吹过头了? [引用日期2026-10-29]
- TypeScript 令我苦不堪言 [引用日期2026-10-29]