2010 – 微软团队开始开发 2012 – 第一个公开版本发布(TypeScript 0.8) 2013 – TypeScript 0.9 发布,支持泛型了 2014 – TypeScript 1.0 发布,Visual Studio 2013 默认支持 TypeScript 了。同时,源码从 CodePlex 迁移到 Github 2017 – TypeScript 2.1 发布 2018 – TypeScript 3.2 发布
TypeScript 最初是个微软内部项目,叫 Strada,致力于提升大型 JS 项目(当时内部需求是 Bing Maps、 Office Web Apps 甚至 Windows 8 apps)的可靠性和可维护性。2010 年开始开发,2012 年 10 月发布了第一个开源版本,持续迭代至今
Application scale JavaScript development is hard.
JavaScript 最初设计目标是作为一种脚本语言,缺少一些构建大型应用必备的基础特性,如:
类型上的缺陷导致很多错误要到运行时才能暴露出来,另一方面,缺少静态类型也是 JS 编辑体验差的主要原因,智能提示、自动补全等现代化编辑体验都是从 Visual Studio 开始的:
(摘自JavaScript IntelliSense)
Application scale JavaScript development is hard, TypeScript makes it easier.
TypeScript 期望通过源码转译的方式填补这些缺陷,给 JavaScript 添上 OOP 支持(Class、Interface 等),以及可选的静态类型系统,在 ES5 时代(2010 年)建立起开发大型 JavaScript 应用的根基
此外,TypeScript 还给 JavaScript 带来了一个重要的东西,d.ts
声明文件:
Working with existing JavaScript libraries, declaration file can be written and maintained separately.
通过独立的声明文件让现有 JavaScript 类库也能拥有 TypeScript 的类型优势,在提升 JavaScript 编辑体验方面迈出了一大步
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
有 3 个关键点:
具体的:
可以认为TypeScript 是 JavaScript 的语法糖:
TypeScript is a syntactic sugar for JavaScript. TypeScript syntax is a superset of ECMAScript 2015 (ES2015) syntax. Every JavaScript program is also a TypeScript program.
(摘自Introduction | TypeScript Language Specification)
像类型补丁一样,能与 JavaScript 世界完美融合,这才是 TypeScript 生命力之所在:
Starts and ends with JavaScript, and optional static types, classes, modules.
并且,这一点从 TypeScript 公开发布(2012 年末)至今(2019 年初)都没有变过
追求:
拒绝:
最重要的是,静态类型仅在编译时存在:
In the JavaScript output, all type annotations have been erased.
例如:
// TypeScript
function f(s: string) {
return s;
}
// 编译得到的JavaScript,类型标注统统擦掉
function f(s) {
return s;
}
另外,TypeScript 虽然提供了静态类型系统,并在编译时严格检查,但并不像Haskell 类型系统一样可证明,可推理。因此,TypeScript 类型系统更多地只是作为 JavaScript 的静态类型补丁,像注释一样体现“意图”,并不保证安全
注意,模块的语法规则与 ES 标准一致,但在加载机制上存在差异,具体见Module Resolution