TypeScript

义项:编程语言
TypeScript

TypeScript 是微软开发并开源的编程语言,是在 JavaScript 之上构建的类型化超集,代码经编译器处理后转为普通的 JavaScript,可在任何支持 JavaScript 的环境中运行[1]。它加入可选的静态类型、类与模块等机制,配合编辑器提供类型提示与重构能力,主要用于规模较大、多人协作的前端与服务器端项目[2][3]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

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 之上补充的静态检查机制。

词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:41:13Z

历史版本

本条目引用的词条
JavaScript 编译器 ECMAScript Visual Studio Code 类型系统