TypeScript

是由微軟進行開發和維護的一種開源的編程語言。TypeScript是JavaScript的嚴格語法超集，提供了可選的靜態型別檢查。
TypeScript的知名開發者有C#的首席架構師兼Delphi和Turbo Pascal的創始人——安德斯·海爾斯伯格。
TypeScript是為開發大型應用程式而設計的，且可轉譯成JavaScript。由於TypeScript是JavaScript的嚴格語法超集，因此任何現有的JavaScript程式都是合法的TypeScript程式。
TypeScript支援為現存JavaScript函式庫添加型別資訊的定義文件，方便其他程序像使用靜態型別的TypeScript實體一樣，使用現有程式庫中的值，就像是C++的標頭檔可以描述目的檔（objectfile）的結構一樣。有許多第三方標頭檔為熱門函式庫像是jQuery、MongoDB、Node.js和D3.js等提供定義文件。
TypeScript編譯器本身也是用TypeScript編寫，並被轉譯為JavaScript，以Apache許可證第二版發佈。

**背景**
經過微軟兩年的內部開發後，TypeScript於2012年10月首次發佈（0.8版本）。在發佈後不久，Miguel de Icaza認可了這門語言，但批評了其糟糕的IDE支持性，僅有Microsoft Visual Studio IDE支持其代碼，但此IDE當時未在Linux和OS X操作系統上發佈。如今，在其他IDE中（例如：Eclipse），通過Palantir Technologies提供的插件支持，能支持TypeScript語法。大部分主流的文本編輯器，例如：Emacs、Vim、WebStorm、Atom和微軟發佈的Visual Studio Code也能支持TypeScript語法。
2013年發佈的 TypeScript 0.9增加了對泛型的支持。TypeScript 1.0在2014年的微軟開發者大會上發佈。Visual Studio 2013 Update 2為TypeScript提供了原生支持。
2014年7月，開發團隊發佈了新的TypeScript編輯器，聲稱其性能提高了5倍。同時，代碼託管由CodePlex遷移至GitHub。
2016年9月22日，TypeScript 2.0發佈，其中引入了幾個功能，例如開發者可以選擇不為變量分配空值等。
2018年7月30日，TypeScript 3.0發佈，其中包含許多新功能，例如 剩餘參數date=20200515232544 、 展開語法date=20200516015848 、帶有元組的剩餘參數、帶有通用類型的剩餘參數等。

**設計背景**
TypeScript起源於JavaScript在微軟以及客戶中開發大型應用中遇到的缺點。處理複雜JavaScript代碼帶來的挑戰使他們需要自定義工具來簡化組件開發流程。
TypeScript開發者尋求一種不破壞現有標準兼容性和跨平臺支持的解決方案。直到ECMAScript標準為未來基於類編程提供支持後，Typescript開發便基於此方案。這形成了包含一組新的語法擴展的一個JavaScript編譯器，一個基於此提案的超集，可將TypeScript語法編譯為常規的JavaScript。從這個意義上來講，TypeScript是ECMAScript2015預期內容的預覽版本。提案中未包括的可選靜態類型被添加到了TypeScript中，有助於促進工具和IDE支持。

**ECMAScript 6支持**
TypeScript添加了ECMAScript 2015標準中定義的類、模塊和箭頭函數等語法的支持。

**語言特性**
TypeScript是一種為JavaScript添加特性的語言擴展。增加的功能包括：
*類型批註和編譯時類型檢查
*類型推斷
*類型擦除
*接口
*枚舉
*Mixin
*泛型編程
*命名空間
*元組
*async/await
以下功能是從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類型。
聲明文件的概念類似於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支持集成了可選的類別批註支持的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(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規範之中。
Node.js自22.6.0版本開始，便提供了少部分實驗性的TypeScript支持。Bun、Deno等JavaScript運行時也提供了直接運行TypeScript文件的功能，編譯到JavaScript的工作會在內部發生，不需要用戶手動進行操作。

**開發工具**

**編譯器**
TypeScript編譯器，叫做tsc，本身也是用TypeScript寫成的。可以將TypeScript編譯為可以在任何JavaScript引擎（如瀏覽器）中執行的標準JavaScript。編譯器包也包含了腳本解釋器，用來執行編譯器。同時也有個Node.js包，在Node.js平臺執行。
另外還有一個用JavaScript寫的alpha版本的客戶端編譯器，它在頁面載入時，即時執行TypeScript代碼。
這種編譯器的當前版本默認支持ECMAScript 2015。一個選項是允許以ECMAScript 2015為目標，以利用該版本獨有的語言特性（比如生成器）。類是ECMAScript 2015標準的一部分，在這兩個模式下都可以使用。

**IDE和編輯器支持**
 微軟為Visual Studio 2012和WebMatrix提供了一個插件，在Visual Studio 2013和Visual Studio 2015中內嵌了支持，也為Sublime Text、Emacs和Vim提供了基本的文本編輯器支持。- Visual Studio Code是一個開源的、跨平臺的代碼編輯器，是微軟在Electron的基礎上開發的。它支持TypeScript，同時也支持其他幾個語言，同時提供了調試和自動代碼補全的功能。- JetBrains在他們的IDE系列中支持TypeScript，而且已經發行了具有部分支持的PhpStorm 6和WebStorm 6以及IntelliJ IDEA。同時他們的Visual Studio擴展 ReSharper date=20161213124101 8.1也支持。- 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 date=20180528213128  — Emacs的TypeScript交互開發環境

**開源**
TypeScript是開源的，其源代碼可以在Apache 2 License下從Github獲得。這個項目由Microsoft維護，但是任何人可以通過在Github項目頁發送反饋、提出建議和提交bugfixes而做出貢獻。
已有一些批評提到，TypeScript鼓勵強類型，當前只有Microsoft Visual Studio支持在該語言上方便開發。最初的方案是在其它的編輯器上帶來強類型，IntelliSense、代碼完成和代碼重構的功能，但這可能不是一個簡單的任務。此外，支持TypeScript開發的Visual Studio擴展不是開源的。最好的TypeScript開發體驗是在Microsoft Windows上，然而隨著時間的流逝以及這種語言的開放性，加之編譯器自我託管，而且用TypeScript自身寫的，這很有可能會改變。通過編譯器的源代碼訪問到AST（抽象句法樹）以及詳細的語言規範文檔，社群已開始構建一個跨平臺的編輯器，利用和Visual Studio所用到的相同的語言服務以提供一個增強的編輯體驗。編輯器仍然在概念檢驗的階段，但已經運行於Linux、macOS和Windows，提供功能強度相同的IntelliSense、代碼完成和句法高亮方法。

**參見**
JavaScript
*ECMAScript

**其它編譯為JavaScript的語言**
CoffeeScript
*Dart
*HaXe

**參考資料**

**外部鏈接**
  TypeScript官方網站date=20180310153413 -  Typescript中文網 date=20240329030155 - list of languages that compile to JSdate=20130807232538