TypeScript

背景

TypeScript起源于微软以及外部客户在开发大规模JavaScript应用的过程中遇到的语言本身的短板。处理复杂JavaScript代码的挑战使得自定义工具在开发这门语言时很有必要。
很多依赖于JavaScript的开发者通常用最终编译为JavaScript代码的另一种语言编写脚本，例如CoffeeScript和Script#（读作ScriptSharp）。一个明显的劣势是也许无法在那另一种语言中使用任何JavaScript细节的语言特性，如果那种语言不支持。

类型批注

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的类。
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，本身也是用TypeScript 写成的。可以将TypeScript 编译为可以在任何JavaScript 引擎（如浏览器）中执行的标准JavaScript。编译器包也包含了脚本解释器，用来执行编译器。同时也有个Node.js 包，在 Node.js 平台执行。
另外还有一个用JavaScript写的alpha版本的客户端编译器，它在页面加载时，实时执行TypeScript 代码。
这种编译器的当前版本默认支持ECMAScript 5。一个选项是允许以ECMAScript 2015 为目标，以利用该版本独有的语言特性（比如生成器）。类尽管是ECMAScript 2015 标准的一部分，在这两个模式下都可以使用。

开源

TypeScript是开源的，其源代码可以在Apache 2 License下从Github获得。这个项目由Microsoft维护，但是任何人可以通过在Github项目页发送反馈、提出建议和提交bugfixes而做出贡献。
已有一些批评提到，TypeScript鼓励强类型，当前只有Microsoft Visual Studio支持在该语言上方便开发。最初的方案是在其它的编辑器上带来强类型，IntelliSense, 代码完成和代码重构的功能，但这可能不是一个简单的任务。此外，支持TypeScript开发的Visual Studio扩展不是开源的。最好的TypeScript开发体验是在Microsoft Windows上，然而随着时间的流逝以及这种语言的开放性，加之编译器自我托管，而且用TypeScript自身写的，这很有可能会改变。通过编译器的源代码访问到AST（抽象句法树）以及详细的语言规范文档，社群已开始构建一个跨平台的编辑器，利用和Visual Studio所用到的相同的语言服务以提供一个增强的编辑体验。编辑器仍然在概念检验的阶段，但已经运行于Linux, OSX和Windows，提供功能强度相同的IntelliSense,代码完成和句法高亮方法。