TypeScript 简介
在本课程中,我们将对编程语言 TypeScript 有一个高层次的理解。
TypeScript 是在 JavaScript 之上的语言,JavaScript 中所有可能的功能在 TypeScript 中都能使用——它本质上是 JavaScript 的超集。TypeScript 提供了两大优势。第一个优势是,它可以将 TypeScript 编译为 JavaScript,从而让那些并非所有浏览器都支持的高级 ECMAScript 特性得以通过 polyfill 使用。它相当于将其他静态检查工具与 Babel 结合在一起。
第二个优势在于,TypeScript 能够强制实施静态类型,从而在开发生命周期早期捕捉潜在问题。这减少了对部分单元测试的需求,并能在设计阶段分析代码以发现运行时错误。
TypeScript 于 2012 年 10 月 1 日正式发布,但其起源可追溯至两年前(2010 年)在微软雷德蒙德总部内部开发的一个项目。该项目是开源的,托管在 Github.com 上,采用 Apache2 许可证。
TypeScript 的受欢迎程度逐年上升。它拥有 317 个分支、228 名贡献者、48 次发布,每月产生超过 188 个拉取请求,拥有超过 3600 个分支和 2.5 万个星标。每两个月稳定发布一个新版本,加上大量开发者持续贡献,使其成为一个卓越的开源项目。它发展迅速,能够紧跟开发者需求,并适应网页技术快速演进的步伐。
TypeScript 并不仅仅被其创建者微软所使用。虽然确实有许多微软产品采用了 TypeScript,例如 Microsoft Teams、Visual Studio Team Services(VSTS)、在线版 Office 和 Visual Studio Code(VSCode),但其他科技巨头也纷纷借鉴了静态类型带来的优势。谷歌自 Angular 2 起开始使用 TypeScript,Slack 也将其 JavaScript 代码库迁移至 TypeScript,此外像 Ubisoft、Asana、爱立信、Upwork、彭博社和 Lyft 等公司也陆续跟进。我提到这些使用 TypeScript 的公司,是为了强调成千上万开发者投入其中,以及数百万行代码的积累。这些开发者背景各异。除了整个行业投入的巨大工作量和知识沉淀外,这也说明在你之前已有许多人面临过是否选择 TypeScript 的决策,并最终选择了它。尽管大多数例子来自大型项目,但它们都有一个共同点:总有人需要编写和维护代码。静态类型在从小到大的各类项目中都展现出显著价值。
关于谁在主导 TypeScript 的发展,目前由 Anders Hejlsberg 负责。他是 Turbo Pascal、Delphi、C# 的创造者,如今也是 TypeScript 的缔造者。Hejlsberg 出生于上世纪六十年代(1960 年),职业生涯中获得过诸多奖项,也是该 GitHub 项目提交代码最多的开发者。这样一位杰出工程师担任项目负责人,极大提升了 TypeScript 语言的成熟度。
TypeScript 社区远不止于其代码仓库本身。StackOverflow 上的相关讨论非常活跃,问题数量超过 3.5 万个。各种框架的 TypeScript 示例丰富多样,无论是 Angular 还是 React,都能轻松找到用 TypeScript 编写的示例,甚至像著名的 TodoMVC 项目也有 TypeScript 实现。
TypeScript 的核心理念是在设计阶段提供强类型语言支持,但生成的代码中不包含任何类型信息。类型信息在编译过程中会被移除,包括类型、接口、别名等,最终输出的是标准的 JavaScript 文件。这种移除看似合理,但运行时缺乏类型信息意味着设计不能依赖运行时动态判断类型。当我们进行类型比较以确定所用接口时,会遇到实际挑战。请记住,接口和类型在运行时并不存在。因此,在执行的代码中如何实现这类检查,便成为一个值得思考的问题。