TypeScript是一种开源的编程语言,该语言项目由微软进行维护和管理。TypeScript不仅包含JavaScript的语法,而且还提供了静态类型检查以及使用看起来像基于类的面向对象编程语法操作 Prototype。C#的首席架构师以及Delphi和Turbo Pascal的创始人安德斯·海尔斯伯格参与了TypeScript的开发。
TypeScript是为开发大型应用而设计的,并且TypeScript可转译成JavaScript。由于TypeScript是JavaScript的严格超集,任何现有的JavaScript程序都是合法的TypeScript程序。
TypeScript支持为现存JavaScript库添加类型信息的定义文件,方便其他程序像使用静态类型的值一样使用现有库中的值。目前有第三方提供常用库如jQuery、MongoDB、Node.js和D3.js的定义文件。
TypeScript编译器本身也是用TypeScript编写,并被转译为JavaScript,以Apache许可证第二版发布。
经过微软两年的内部开发后,TypeScript于2012年10月首次发布0.8版本。 在发布后不久, Miguel de Icaza 认可了这门语言,但批评了其糟糕的IDE支持性,仅有 Microsoft Visual Studio IDE支持其代码,但此IDE当时未在Linux和OS X操作系统上发布。 如今,在其他IDE中(例如 Eclipse), 通过 Palantir Technologies 提供的插件支持,能支持TypeScript语法。 大部分主流的文本编辑器,例如 Emacs, Vim, Webstorm, Atom 和微软发布的 Visual Studio Code 也能支持TypeScript语法.
2013年发布的TypeScript 0.9增加了对泛型的支持。 TypeScript 1.0在2014年的微软开发者大会上发布。 Visual Studio 2013 Update 2 为TypeScript提供了原生支持。
2014年7月,开发团队发布了新的TypeScript编辑器,声称其性能提高了5倍。同时,代码托管由 CodePlex 迁移至 GitHub。
2016年9月22日,TypeScript 2.0发布,其中引入了几个功能,例如开发者可以选择不为变量分配空值 等。
2018年7月30日,TypeScript 3.0发布 ,其中包含许多新功能,例如剩余参数页面存档备份,存于互联网档案馆,展开语法页面存档备份,存于互联网档案馆,带有元组的剩余参数,带有通用类型的剩余参数等。
TypeScript 起源于 Javascript 在微软以及客户中开发大型应用中遇到的缺点。 处理复杂 JavaScript 代码带来的挑战使他们需要自定义工具来简化组件开发流程。
TypeScript 开发者寻求一种不破坏现有标准兼容性和跨平台支持的解决方案。知道ECMAScript标准为未来基于类编程提供支持后, Typescript开发便基于此方案。这形成了包含一组新的语法扩展的一个JavaScript编译器,一个基于此提案的超集,可将TypeScript语法编译为常规的JavaScript。从这个意义上来讲, TypeScript是ECMAScript 2015预期内容的预览版本。提案中未包括的可选静态类型被添加到了TypeScript中, 有助于促进工具和IDE支持。
TypeScript 添加了ECMAScript 2015标准中定义的类,模块,箭头函数等语法的支持。
TypeScript是一种给JavaScript添加特性的语言扩展。增加的功能包括:
以下功能是从ECMA 2015反向移植而来:
在语法上,TypeScript很类似JScript .NET,它是另外一个微软对ECMA-262语言标准的实现,添加了对静态类型、经典的面向对象语言特性(如类、继承、接口和名字空间等)的支持。
TypeScript通过类型批注提供在编译时启动类型检查的静态类型。这是可选的,而且可以忽略而使用JavaScript常规的动态类型。
function Add(left: number, right: number): number { return left + right;}
对于基本类型的批注是number
、bool
和string
。而弱或动态类型的结构则是any
类型。
类型批注可以被导出到一个单独的“声明文件”,以让使用类型已被编译为JavaScript的TypeScript脚本中的类型信息仍可用。批注可以为一个现有的JavaScript库声明,就像已经为Node.js和jQuery所做的那样。
当类型没有给出时,TypeScript编译器利用类型推断来推断类型。如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态any
类型。
当一个TypeScript脚本被编译时,有一个产生作为编译后的JavaScript的组件的一个接口而起作用的声明文件(具有扩展名.d.ts)的选项。在这个过程中编译器基本上带走所有的函数和方法体而仅保留所导出类型的批注。当第三方开发者从TypeScript中使用它时,由此产生的声明文件就可以被用于描述一个JavaScript库或模块导出的虚拟的TypeScript类型。
声明文件的概念类似于C/C++中头文件的概念。
module Arithmetics { add(left: number, right: number): number; subtract(left: number, right: number): number; multiply(left: number, right: number): number; divide(left: number, right: number): number; }
类型声明文件可以为已存在的JavaScript库手写,就像为jQuery和Node.js所做的那样。
TypeScript增加了对为即将到来的ECMAScript 6标准所建议的特性的支持。
如下为其构想:
尽管标准还未准备就绪,Microsoft说它的目标是使TypeScript的特性与建议的标准看齐。
TypeScript支持集成了可选的类型批注支持的ECMAScript 6的类。
class Person { private name: string; private age: number; constructor(name: string, age: number){ this.name = name; this.age = age; } toString(): string { return this.name + "(" + this.age + ")"; }}