TypeScript

本页使用了标题或全文手工转换,现处于中国大陆简体模式
求闻百科,共笔求闻
TypeScript
编程范型多范型函数式泛型指令式面向对象
设计者微软
实现者微软
发行时间2012年10月1日,​11年前​(2012-10-01[1]
稳定版本
4.4.4
(2021年10月12日,​2年前​(2021-10-12[2]
预览版本
4.5 Beta
(2021年10月2日,​2年前​(2021-10-02[3]
类型系统鸭子类型, 渐进类型, 结构类型[4]
许可证Apache 许可证 2.0
文件扩展名.ts, .tsx
网站www.typescriptlang.org
受启发于
C#JavaJavaScript
施影响于
AtScript、AssemblyScript

TypeScript是一种开源的编程语言,该语言项目由微软进行维护和管理[5]。TypeScript不仅包含JavaScript的语法,而且还提供了静态型别检查以及使用看起来像类别为基的对象导向编程语法操作Prototype。C#的首席架构师以及DelphiTurbo Pascal的创始人安德斯·海尔斯伯格参与了TypeScript的开发。[6][7][8][9]

TypeScript是为开发大型应用而设计的,并且TypeScript可转译成JavaScript。[10]由于TypeScript是JavaScript的严格超集,任何现有的JavaScript程序都是合法的TypeScript程序。

TypeScript支持为现存JavaScript函数库添加类型资讯的定义文件,方便其他程序像使用静态类型的值一样使用现有库中的值。目前有第三方提供常用函数库如jQueryMongoDBNode.jsD3.js的定义文件。

TypeScript编译器本身也是用TypeScript编写,并被转译为JavaScript,以Apache许可证第二版发布。

背景

经过微软两年的内部开发后,TypeScript于2012年10月首次发布0.8版本。[11][12]在发布后不久,Miguel de Icaza认可了这门语言,但批评了其糟糕的IDE支持性,仅有Microsoft Visual Studio IDE支持其代码,但此IDE当时未在Linux和OS X操作系统上发布。[13][14]如今,在其他IDE中(例如 Eclipse),通过Palantir Technologies提供的插件支持,能支持TypeScript语法。[15][16]大部分主流的文本编辑器,例如EmacsVimWebstormAtom[17]和微软发布的Visual Studio Code也能支持TypeScript语法.[18]

2013年发布的TypeScript 0.9增加了对泛型的支持。[19]TypeScript 1.0在2014年的微软开发者大会上发布。[20]Visual Studio 2013 Update 2为TypeScript提供了原生支持。[21]

2014年7月,开发团队发布了新的TypeScript编辑器,声称其性能提高了5倍。同时,代码托管由CodePlex迁移至GitHub[22]

2016年9月22日,TypeScript 2.0发布,其中引入了几个功能,例如开发者可以选择不为变量分配空值[23]等。

2018年7月30日,TypeScript 3.0发布[24],其中包含许多新功能,例如剩余参数展开语法、带有元组的剩余参数、带有通用类型的剩余参数等。[25]

设计背景

TypeScript起源于Javascript在微软以及客户中开发大型应用中遇到的缺点。[26]处理复杂JavaScript代码带来的挑战使他们需要自定义工具来简化组件开发流程。[27]

TypeScript开发者寻求一种不破坏现有标准兼容性和跨平台支持的解决方案。知道ECMAScript标准为未来基于类编程提供支持后, Typescript开发便基于此方案。这形成了包含一组新的语法扩展的一个JavaScript编译器,一个基于此提案的超集,可将TypeScript语法编译为常规的JavaScript。从这个意义上来讲,TypeScript是ECMAScript 2015预期内容的预览版本。提案中未包括的可选静态类型被添加到了TypeScript中,有助于促进工具和IDE支持。

ECMAScript 6支持

TypeScript 添加了ECMAScript 2015标准中定义的类、模块和箭头函数等语法的支持。

语言特性

TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:

以下功能是从ECMA 2015反向移植而来:

在语法上,TypeScript 很类似 JScript .NET,它是另外一个微软对ECMA-262语言标准的实现,添加了对静态类型、经典的面向对象语言特性(如类、继承、接口和命名空间等)的支持。

类型批注

TypeScript 通过类型批注提供静态类型,以在编译时启动类型检查。这是可选的,而且可以忽略而使用JavaScript常规的动态类型。

function Add(left: number, right: number): number {
	return left + right;
}

对于基本类型的批注是numberbooleanstring。而弱型别或动态类型的结构则是 any 类型。

类型批注可以被导出到一个单独的“声明文件”,让使用已被编译为 JavaScript 类型的 TypeScript 脚本中的类型信息仍可用。批注可以为现有的JavaScript库声明,就像 Node.js 和 jQuery 所做的那样。

没有给出类型时,TypeScript 编译器会利用类型推断来推断类型。如果由于缺乏声明而不能推断出类型,那么它的类型将默认为动态 any 类型。

声明文件

当一个 TypeScript 脚本被编译时,有一个产生作为编译后的JavaScript的组件的一个接口而起作用的声明文件(具有扩展名.d.ts)的选项。在这个过程中编译器基本上带走所有的函数和方法体而仅保留所导出类型的批注。当第三方开发者从TypeScript中使用它时,由此产生的声明文件就可以被用于描述一个JavaScript库或模块导出的虚拟的TypeScript类型。

声明文件的概念类似于C/C++头文件的概念。

   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 支持集成了可选的类型批注支持的 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})`;
    }
}

泛型

TypeScript 支持泛型编程。以下为恒等函数的范例:

function id<T>(x: T): T {
    return x;
}

模块和命名空间

在 TypeScript 中,模块和命名空间是被区分开的。这两项功能在 TypeScript 中皆支持将类型、接口、函数和变量封装至容器内。命名空间(旧称内部模块)使用 JavaScript 的立即调用函数表达式来封装代码,而模块(旧称外部模块)则是以 JavaScript 函数库模式来达成(异步模块定义CommonJS)。

与JavaScript的兼容性

TypeScript 是 JavaScript 的一个超集。默认情况下编译器以 ECMAScript 3(ES3)为目标但ES5也是受支持的一个选项。一个 TypeScript 应用可以利用已存在的JavaScript脚本。编译后的 TypeScript 脚本也可以在JavaScript中使用。

现有框架如 jQuery 和 Node.js 等受到完全支持。这些库的类型声明在源代码中提供。

支持的浏览器和平台

运行于任何平台上的任何网页浏览器都可以运行 TypeScript:由于它仅仅是被编译为标准的 JavaScript,一个脚本既可以被预编译为 JavaScript,也可以通过为 TypeScript 包含JavaScript编译器实时编译。

开发工具

编译器

TypeScript编译器,叫做tsc,本身也是用TypeScript写成的。可以将TypeScript编译为可以在任何JavaScript引擎(如浏览器)中执行的标准JavaScript。编译器包也包含了脚本解释器,用来执行编译器。同时也有个Node.js包,在Node.js平台执行。

另外还有一个用JavaScript写的alpha版本的客户端编译器,它在页面加载时,实时执行TypeScript代码。[29]

这种编译器的当前版本默认支持ECMAScript 5。一个选项是允许以ECMAScript 2015为目标,以利用该版本独有的语言特性(比如生成器)。类是ECMAScript 2015标准的一部分,在这两个模式下都可以使用。

IDE和编辑器支持

开源

TypeScript是开源的,其源代码可以在Apache 2 License下从Github获得。这个项目由Microsoft维护,但是任何人可以通过在Github项目页发送反馈、提出建议和提交bugfixes而做出贡献。[33]

已有一些批评提到,TypeScript鼓励强类型,当前只有Microsoft Visual Studio支持在该语言上方便开发。最初的方案是在其它的编辑器上带来强类型,IntelliSense, 代码完成代码重构的功能,但这可能不是一个简单的任务。[34]此外,支持TypeScript开发的Visual Studio扩展不是开源的。最好的TypeScript开发体验是在Microsoft Windows上,[35]然而随着时间的流逝以及这种语言的开放性,加之编译器自我托管,而且用TypeScript自身写的,这很有可能会改变。通过编译器的源代码访问到AST(抽象句法树)以及详细的语言规范文档,社群已开始构建一个跨平台的编辑器,[36][37]利用和Visual Studio所用到的相同的语言服务以提供一个增强的编辑体验。编辑器仍然在概念检验的阶段,但已经运行于Linux, OSX和Windows,提供功能强度相同的IntelliSense,代码完成和句法高亮方法。

参见

其它编译为JavaScript的语言

参考资料

  1. TypeScript. CodePlex. [2015-04-26]. 
  2. Release TypeScript 4.4.4 · microsoft/TypeScript · GitHub. [2021-10-12]. 
  3. Daniel. Announcing TypeScript 4.5 Beta. 2021-10-02 [2021-10-02]. 
  4. Type Compatibility. TypeScript. [2018-03-21]. 
  5. TypeScript GitHub官网. 
  6. Foley, Mary Jo. Microsoft takes the wraps off TypeScript, a superset of JavaScript. ZDNet. CBS Interactive. 2012-10-01 [2015-04-26]. 
  7. Somasegar, S. Somasegar’s blog. Somasegar’s blog. Microsoft. 2012-10-01 [2015-04-26]. 
  8. Baxter-Reynolds, Matt. Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?. ZDNet. 2012-10-01 [2015-04-26]. 
  9. Jackson, Joab. Microsoft Augments Javascript for Large-scale Development. CIO. IDG Enterprise. 2012-10-01 [2015-04-26]. 
  10. Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem? | Ars Technica. [2012-10-09]. 
  11. Microsoft augments JavaScript for large-scale development. InfoWorld. IDG. 2012-10-01 [2015-04-26]. 
  12. Turner, Jonathan. Announcing TypeScript 1.0. TypeScript Language team blog. Microsoft. 2014-04-02 [2015-04-26]. 
  13. 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 
  14. 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.. 
  15. TypeScript-Unterstützung für Eclipse. heise Developer. 2013-08-06 [2015-04-26]. 
  16. TypeScript. Eclipse Marketplace. Eclipse Foundation. [2015-04-26]. 
  17. TypeStrong: The only TypeScript package you will ever need. [2016-07-21]. 
  18. Hillar, Gastón. Working with TypeScript in Visual Studio 2012. Dr. Dobb's Journal. 2013-05-14 [2015-04-26]. 
  19. TypeScript 0.9 arrives with new compiler, support for generics. The Register. 2013-06-18 [2015-04-26]. 
  20. Hejlsberg, Anders. TypeScript. Channel 9. Microsoft. 2014-04-02 [2015-04-26]. 
  21. Jackson, Joab. Microsoft TypeScript graduates to Visual Studio. PC World. IDG. 2014-02-25 [2015-04-26]. 
  22. Turner, Jonathan. New Compiler and Moving to GitHub. TypeScript Language team blog. Microsoft. 2014-07-21 [2015-04-26]. 
  23. Bright, Peter. TypeScript, Microsoft's JavaScript for big applications, reaches version 2.0. Ars Technica. Condé Nast. 2016-09-22 [2016-09-22]. 
  24. Announcing TypeScript 3.0. 2018-07-30 [2020-03-16]. 
  25. TypeScript 3.0. 2018-07-30 [2020-03-16]. 
  26. Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg. www.hanselminutes.com. 2012-10-05 [2014-01-15]. 
  27. S. Somasegar. TypeScript: JavaScript Development at Application Scale. msdn.com. 2012-10-01 [2013-11-27]. 
  28. 存档副本. [2012-11-10]. 
  29. niutech/typescript-compile. GitHub. [2015-04-26]. 
  30. Olivier Bloch. Sublime Text, Vi, Emacs: TypeScript enabled!. Microsoft. 2012-10-01 [2012-10-28]. 
  31. TypeScript support in WebStorm 6. JetBrains. [2016-12-17]. 
  32. TypeScript support in ReSharper 8.1. JetBrains. [2016-12-17]. 
  33. 存档副本. [2016-12-17]. 
  34. 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 
  35. 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.. 
  36. Code Assistant for TypeScript. [2013-01-07]. 
  37. TypeScript Editor. 2012-11-21 [2013-01-07]. 

外部链接