TypeScript

程式語言,編譯成JavaScript的JavaScript超集 来自维基百科,自由的百科全书

TypeScript是由微软进行开发和维护[4]的一种开源编程语言。TypeScript是JavaScript的严格语法超集,提供了可选的静态型别检查。

事实速览 编程范型, 设计者 ...
TypeScript
Thumb
编程范型多范型函数式泛型指令式面向对象
设计者微软
实作者微软
发行时间2012年10月1日,​12年前​(2012-10-01[1]
当前版本
  • 5.8.2(2025年2月28日;稳定版本)[2]
编辑维基数据链接
型态系统鸭子类型, 渐进类型英语Gradual typing, 结构类型英语Structural type system[3]
许可证Apache 许可证 2.0
文件扩展名.ts, .tsx
网站www.typescriptlang.org 编辑维基数据链接
受影响于
C#JavaJavaScript
影响语言
AtScript英语AtScript、AssemblyScript
关闭

TypeScript的知名开发者有C#的首席架构师兼DelphiTurbo Pascal的创始人——安德斯·海尔斯伯格[5][6][7][8]

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

TypeScript支援为现存JavaScript函式库添加型别资讯的定义文件,方便其他程序像使用静态型别的TypeScript实体一样,使用现有程式库中的值,就像是C++标头档可以描述目的档(objectfile)的结构一样。有许多第三方标头档为热门函式库像是jQueryMongoDBNode.jsD3.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]。大部分主流的文本编辑器,例如:EmacsVimWebStormAtom[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支持。

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类型。

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

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})`;
    }
}

函式

TypeScript支援函式编程。以下为恒等函数的范例:

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]BunDeno等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标准的一部分,在这两个模式下都可以使用。

IDE和编辑器支持

开源

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

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

参见

其它编译为JavaScript的语言

参考资料

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.