TypeScript

![]() | 此條目可参照英語維基百科相應條目来扩充。 |
![]() TypeScript的logo | |
設計者 | Microsoft |
---|---|
實作者 | Microsoft |
发行时间 | 2012 |
当前版本 |
|
許可證 | Apache License |
文件扩展名 | .ts |
網站 | http://www.typescriptlang.org/ |
受影响于 | |
JavaScript, Java, C# |
TypeScript是一種由微軟開發的自由和開源的編程语言。它是JavaScript的一個超集合,並且在這個語言添加了可選的靜態型別和類別基礎的物件導向編程。安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发。[2]
TypeScript擴展了JavaScript的語法,任何現有的JavaScript程式不需要變更就能直接在TypeScript中正常作用。TypeScript是為大型應用的開發而設計的,編譯時它會產生JavaScript以確保相容性。[3]
TypeScript支援為現存JavaScript函式庫添加類型資訊的表頭,因而擴大了它對常用函式庫如jQuery,MongoDB,Node.js和D3.js的優勢。
背景
TypeScript起源于开发应用程序规模的JavaScript应用程序的需求。Microsoft的语言开发者们说内部以及外部的客户都表示他们构建JavaScript代码的问题。
很多最终依赖于JavaScript的开发者通常用编译为JavaScript代码的另一种语言写脚本,例如CoffeeScript和Script#(读作ScriptSharp)。一个明显的劣势是也许无法从那另一种语言使用任何JavaScript的具体的语言特性,如果那种语言不支持它的话。
在Microsoft内部,它导致了自定义工具以简化JavaScript组件的编写的需求。
语言特性
TypeScript是一种给JavaScript添加特性的语言扩展。
语法上,TypeScript很类似于JScript .NET,另外一个添加了对静态类型,经典的面向对象语言特性如类,继承,接口和命名空间等的支持的Microsoft对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类型。
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所做的那样。
对ECMAScript 6的支持
TypeScript增加了对为即将到来的ECMAScript 6标准所建议的特性的支持。
如下为其构想:
- 类(以及继承)
- 模块
- Arrow functions
尽管标准还未准备就绪,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 + ")";
}
}
泛型
这种语言的规范说明一个未来的版本将会支持基于类型擦除的泛型编程。
与JavaScript的兼容性
TypeScript是JavaScript的一个超集。默认情况下编译器以ECMAScript 3(ES3)为目标但ES5也是受支持的一个选项。一个TypeScript应用可以利用已存在的JavaScript脚本。编译后的TypeScript脚本也可以从JavaScript中使用。
现有框架如jQuery和Node.js等受到完全支持。这些库的类型声明在源代码中提供。
支持的浏览器和平台
运行于任何平台上的任何网页浏览器都可以运行TypeScript由于它仅仅是被编译为标准的JavaScript。一个脚本既可以被预编译为JavaScript也可以通过为TypeScript包含JavaScript编译器实时编译。
开发工具
编译器
TypeScript编译器,名称叫tsc
,是用可以被编译为可以被执行在任何JavaScript引擎中,在任何宿主 - 如浏览器 - 中的常规JavaScript的TypeScript写的。编译器包被绑定于一个可以执行编译器的脚本宿主。使用Node.js作为宿主的Node.js包同样可以获得。
也有用JavaScript写的客户端编译器的一个alpha版本,它在页面载入时,实时执行JavaScript代码。[5]
这种编译器的当前版本默认支持ECMAScript 3。一个选项是允许以ECMAScript 5为目标以利用该版本独有的语言特性。类,尽管是ECMAScript 6标准的一部分,在这两个模式下都可用。
IDE和编辑器支持
Microsoft为Visual Studio 2012和WebMatrix提供了一个插件,也为Sublime Text, Emacs和Vim提供了基本的文本编辑器支持。[6]在线的Cloud9 IDE也支持TypeScript。JetBrains也计划在他们的IDE系列中支持TypeScript,而且已经发行了具有部分支持的PhpStorm 6和WebStorm 6预览版本。[7]
开源
TypeScript是开源的,其源代码可以在Apache 2 License下从CodePlex获得。这个项目由Microsoft维持,但是任何人可以通过经CodePlex项目页发送反馈,建议和bugfixes而做出贡献。[8]
已有一些批评提到这一想法,即使TypeScript鼓励强类型,当前也只有Microsoft Visual Studio允许为该语言容易的开发。最初的观点是在其它的编辑器上带来强类型,IntelliSense, 代码完成和代码重构可能不是一个简单的任务。[9]此外,允许为TypeScript开发的Visual Studio扩展不是开源的。最好的TypeScript开发体验是在Microsoft Windows上,[10]然而随着时间的流逝以及这种语言开放的本质,加之编译器自我托管,而且用TypeScript自身写的,这很有可能会改变。可以通过编译器的源代码访问到AST(抽象句法树),也可以获得详细的语言规范文档,社群已开始构建一个跨平台的编辑器,[11][12]利用和Visual Studio所用相同的语言服务以提供一个增强的编辑体验。编辑器仍然在概念检验的阶段,但已经运行于Linux, OSX和Windows,提供针对之前对提供此类服务的困难度的估计的IntelliSense,代码完成和句法高亮。
参见
其它编译为JavaScript的语言
更多:list of languages that compile to JS
参考资料
- ^ Release v5.8.2.
- ^ Microsoft takes the wraps off TypeScript, a superset of JavaScript | ZDNet
- ^ Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem? | Ars Technica
- ^ http://techcrunch.com/2012/10/01/microsoft-previews-new-javascript-like-programming-language-typescript/
- ^ TypeScript Compile
- ^ Olivier Bloch. Sublime Text, Vi, Emacs: TypeScript enabled!. Microsoft. 2012-10-01 [2012-10-28].
- ^ PhpStorm & WebStorm 6.0 Early Access Program started. JetBrains.
- ^ http://typescript.codeplex.com/
- ^ Miguel de Icaza. TypeScript: First Impressions. 2012-10-01 [2012-10-12].
But TypeScript only delivers half of the value in using a strongly typed language to Unix developers: strong typing. Intellisense, code completion and refactoring are tools that are only available to Visual Studio Professional users on Windows. There is no Eclipse, MonoDevelop or Emacs support for any of the language features
- ^ Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?. ZDNet. 2012-10-01 [2012-10-12].
And I think this is a pretty big misstep. If you're building web apps that run on anything other than Windows, you're likely using a Mac and most likely not using Visual Studio. You need the Visual Studio plug-in to get the IntelliSense. All you get without Visual Studio is the strong-typing. You don't get the productivity benefits you get from IntelliSense..
- ^ Code Assistant for TypeScript.
- ^ TypeScript Editor. 2012-11-21.