TypeScript
程式語言,編譯成JavaScript的JavaScript超集 来自维基百科,自由的百科全书
TypeScript是由微软进行开发和维护[4]的一种开源的编程语言。TypeScript是JavaScript的严格语法超集,提供了可选的静态型别检查。
![]() | 此条目需要更新。 (2021年8月21日) |
TypeScript的知名开发者有C#的首席架构师兼Delphi和Turbo Pascal的创始人——安德斯·海尔斯伯格[5][6][7][8]。
TypeScript是为开发大型应用程式而设计的,且可转译成JavaScript[9]。由于TypeScript是JavaScript的严格语法超集,因此任何现有的JavaScript程式都是合法的TypeScript程式。
TypeScript支援为现存JavaScript函式库添加型别资讯的定义文件,方便其他程序像使用静态型别的TypeScript实体一样,使用现有程式库中的值,就像是C++的标头档可以描述目的档(objectfile)的结构一样。有许多第三方标头档为热门函式库像是jQuery、MongoDB、Node.js和D3.js等提供定义文件。
TypeScript编译器本身也是用TypeScript编写,并被转译为JavaScript,以Apache许可证第二版发布。
背景
经过微软两年的内部开发后,TypeScript于2012年10月首次发布(0.8版本)。[10][11]在发布后不久,Miguel de Icaza认可了这门语言,但批评了其糟糕的IDE支持性,仅有Microsoft Visual Studio IDE支持其代码,但此IDE当时未在Linux和OS X操作系统上发布[12][13]。如今,在其他IDE中(例如:Eclipse),通过Palantir Technologies提供的插件支持,能支持TypeScript语法[14][15]。大部分主流的文本编辑器,例如:Emacs、Vim、WebStorm、Atom[16]和微软发布的Visual Studio Code也能支持TypeScript语法[17]。
2013年发布的 TypeScript 0.9增加了对泛型的支持[18]。TypeScript 1.0在2014年的微软开发者大会上发布。[19]Visual Studio 2013 Update 2为TypeScript提供了原生支持[20]。
2014年7月,开发团队发布了新的TypeScript编辑器,声称其性能提高了5倍。同时,代码托管由CodePlex迁移至GitHub[21]。
2016年9月22日,TypeScript 2.0发布,其中引入了几个功能,例如开发者可以选择不为变量分配空值等[22]。
2018年7月30日,TypeScript 3.0发布[23],其中包含许多新功能,例如剩余参数(页面存档备份,存于互联网档案馆)、展开语法(页面存档备份,存于互联网档案馆)、带有元组的剩余参数、带有通用类型的剩余参数等[24]。
设计背景
TypeScript起源于JavaScript在微软以及客户中开发大型应用中遇到的缺点[25]。处理复杂JavaScript代码带来的挑战使他们需要自定义工具来简化组件开发流程[26]。
TypeScript开发者寻求一种不破坏现有标准兼容性和跨平台支持的解决方案。直到ECMAScript标准为未来基于类编程提供支持后,Typescript开发便基于此方案。这形成了包含一组新的语法扩展的一个JavaScript编译器,一个基于此提案的超集,可将TypeScript语法编译为常规的JavaScript。从这个意义上来讲,TypeScript是ECMAScript2015预期内容的预览版本。提案中未包括的可选静态类型被添加到了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
、boolean
和string
。而弱型别或动态类型的结构则是any
类型。
类型批注可以被导出到一个单独的“声明文件”,让使用已被编译为JavaScript类型的TypeScript脚本中的类型信息仍可用。批注可以为现有的JavaScript库声明,就像Node.js和jQuery所做的那样。
没有给出类型时,TypeScript编译器会利用类型推断来推断类型。如果由于缺乏声明而不能推断出类型,那么它的类型将默认为动态any
类型。
当一个TypeScript脚本被编译时,有一个产生作为编译后的JavaScript的组件的一个接口而起作用的声明文件(具有扩展名.d.ts
)的选项。在这个过程中编译器基本上带走所有的函数和方法体而仅保留所导出类型的批注。当第三方开发者从TypeScript中使用它时,由此产生的声明文件就可以被用于描述一个JavaScript库或模块导出的虚拟的TypeScript类型。
declare module Arithmetics {
export function add(left: number, right: number): number;
export function subtract(left: number, right: number): number;
export function multiply(left: number, right: number): number;
export function divide(left: number, right: number): number;
}
可以为已存在的JavaScript库(如jQuery和Node.js)撰写类型声明文件。
TypeScript支持集成了可选的类别批注支持的ECMAScript6的类。
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})`;
}
}
function id<T>(x: T): T {
return x;
}
在TypeScript中,模组和命名空间是被区分开的。这两项功能在TypeScript中皆支援将类型、介面、函数和变数封装至容器内。命名空间(旧称内部模组)使用JavaScript的立即呼叫函式表达式来封装程式码,而模组(旧称外部模组)则是以JavaScript函式库模式来达成(非同步模组定义或CommonJS)。
与JavaScript的兼容性
TypeScript是JavaScript的超集。默认情况下编译器以ECMA Script 3(ES3)为目标但ES5也是受支持的一个选项。一个TypeScript应用可以利用已存在的JavaScript脚本。编译后的TypeScript脚本也可以在JavaScript中使用。
现有框架如jQuery和Node.js等受到完全支持。这些库的类型声明在源代码中提供。
支持的浏览器和平台
没有任何浏览器或者运行时能够直接执行不经处理的TypeScript代码,因为TypeScript中的类型注解等特性并不在ECMAScript规范之中。[28]
Node.js自22.6.0版本开始,便提供了少部分实验性的TypeScript支持。[29]Bun、Deno等JavaScript运行时也提供了直接运行TypeScript文件的功能,编译到JavaScript的工作会在内部发生,不需要用户手动进行操作。[30][31]
开发工具
TypeScript编译器,叫做tsc
,本身也是用TypeScript写成的。可以将TypeScript编译为可以在任何JavaScript引擎(如浏览器)中执行的标准JavaScript。编译器包也包含了脚本解释器,用来执行编译器。同时也有个Node.js包,在Node.js平台执行。
另外还有一个用JavaScript写的alpha版本的客户端编译器,它在页面载入时,实时执行TypeScript代码。[32]
这种编译器的当前版本默认支持ECMAScript 2015。一个选项是允许以ECMAScript 2015为目标,以利用该版本独有的语言特性(比如生成器)。类是ECMAScript 2015标准的一部分,在这两个模式下都可以使用。
- 微软为Visual Studio 2012和WebMatrix提供了一个插件,在Visual Studio 2013和Visual Studio 2015中内嵌了支持,也为Sublime Text、Emacs和Vim提供了基本的文本编辑器支持。[33]
- Visual Studio Code是一个开源的、跨平台的代码编辑器,是微软在Electron的基础上开发的。它支持TypeScript,同时也支持其他几个语言,同时提供了调试和自动代码补全的功能。
- JetBrains在他们的IDE系列中支持TypeScript,而且已经发行了具有部分支持的PhpStorm 6和WebStorm 6以及IntelliJ IDEA。[34]同时他们的Visual Studio扩展ReSharper (页面存档备份,存于互联网档案馆)8.1也支持。[35]
- Atom也有一个TypeScript插件, 由Basarat开发,支持代码补全、跳转、格式化和快速完成。
- 在线的Cloud9 IDE和Codenvy也支持TypeScript。
- NetBeans也有一个插件
- Eclipse IDE(Kepler)也有一个插件
- TypEcs也是一个Eclipse IDE插件
- Microsoft为Sublime Text提供了TypeScript插件
- 跨平台云IDE Codeanywhere支持TypeScript
- Webclipse 是一个Eclipse插件,用于开发TypeScript 和 Angular 2
- Angular IDE是一个可以从npm安装的IDE,可以开发TypeScript和Angular 2应用,集成终端支持
- Tide (页面存档备份,存于互联网档案馆) — Emacs的TypeScript交互开发环境
开源
TypeScript是开源的,其源代码可以在Apache 2 License下从Github获得。这个项目由Microsoft维护,但是任何人可以通过在Github项目页发送反馈、提出建议和提交bugfixes而做出贡献。[36]
已有一些批评提到,TypeScript鼓励强类型,当前只有Microsoft Visual Studio支持在该语言上方便开发。最初的方案是在其它的编辑器上带来强类型,IntelliSense、代码完成和代码重构的功能,但这可能不是一个简单的任务。[37]此外,支持TypeScript开发的Visual Studio扩展不是开源的。最好的TypeScript开发体验是在Microsoft Windows上,[38]然而随着时间的流逝以及这种语言的开放性,加之编译器自我托管,而且用TypeScript自身写的,这很有可能会改变。通过编译器的源代码访问到AST(抽象句法树)以及详细的语言规范文档,社群已开始构建一个跨平台的编辑器,[39][40]利用和Visual Studio所用到的相同的语言服务以提供一个增强的编辑体验。编辑器仍然在概念检验的阶段,但已经运行于Linux、macOS和Windows,提供功能强度相同的IntelliSense、代码完成和句法高亮方法。
参见
参考资料
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.