TypeScript

是由微軟進行開發和維護的一種開源的程式語言。TypeScript是JavaScript的嚴格語法超集，提供了可選的靜態型別檢查。TypeScript的知名開發者有C#的首席架構師兼Delphi和Turbo Pascal的創始人——安德斯·海爾斯伯格。TypeScript是為開發大型應用程式而設計的，且可轉譯成JavaScript。由於TypeScript是JavaScript的嚴格語法超集，因此任何現有的JavaScript程式都是合法的TypeScript程式。TypeScript支援為現存JavaScript函式庫新增型別資訊的定義檔案，方便其他程式像使用靜態型別的TypeScript實體一樣，使用現有程式庫中的值，就像是C++的標頭檔可以描述目的檔的結構一樣。有許多第三方標頭檔為熱門函式庫像是jQuery、MongoDB、Node.js和D3.js等提供定義檔案。TypeScript編譯器本身也是用TypeScript編寫，並被轉譯為JavaScript，以Apache許可證第二版釋出。背景.經過微軟兩年的內部開發後，TypeScript於2012年10月首次釋出，透過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釋出，其中包含許多新功能，例如剩餘引數、帶有元組的剩餘引數、帶有通用型別的剩餘引數等。設計背景.TypeScript起源於JavaScript在微軟以及客戶中開發大型應用中遇到的缺點。處理複雜JavaScript程式碼帶來的挑戰使他們需要自定義工具來簡化元件開發流程。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;對於基本型別的批註是codice_1、codice_2和codice_3。而弱型別或動態型別的結構則是codice_4型別。型別批註可以被匯出到一個單獨的“宣告檔案”，讓使用已被編譯為JavaScript型別的TypeScript指令碼中的型別資訊仍可用。批註可以為現有的JavaScript庫宣告，就像Node.js和jQuery所做的那樣。沒有給出型別時，TypeScript編譯器會利用型別推斷來推斷型別。如果由於缺乏宣告而不能推斷出型別，那麼它的型別將預設為動態codice_4型別。宣告檔案.當一個TypeScript指令碼被編譯時，有一個產生作為編譯後的JavaScript的元件的一個介面而起作用的宣告檔案的選項。在這個過程中編譯器基本上帶走所有的函式和方法體而僅保留所匯出型別的批註。當第三方開發者從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庫撰寫型別宣告檔案。類別.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的相容性.TypeScript是JavaScript的超集。預設情況下編譯器以ECMA Script 3為目標但ES5也是受支援的一個選項。一個TypeScript應用可以利用已存在的JavaScript指令碼。編譯後的TypeScript指令碼也可以在JavaScript中使用。現有框架如jQuery和Node.js等受到完全支援。這些庫的型別宣告在原始碼中提供。支援的瀏覽器和平臺.開發工具.編譯器.TypeScript編譯器，叫做codice_7，本身也是用TypeScript寫成的。可以將TypeScript編譯為可以在任何JavaScript引擎中執行的標準JavaScript。編譯器包也包含了指令碼直譯器，用來執行編譯器。同時也有個Node.js包，在Node.js平臺執行。另外還有一個用JavaScript寫的alpha版本的客戶端編譯器，它在頁面載入時，實時執行TypeScript程式碼。這種編譯器的當前版本預設支援ECMAScript 2015。一個選項是允許以ECMAScript 2015為目標，以利用該版本獨有的語言特性。類是ECMAScript 2015標準的一部分，在這兩個模式下都可以使用。開源.TypeScript是開源的，其原始碼可以在Apache 2 License下從Github獲得。這個專案由Microsoft維護，但是任何人可以透過在Github專案頁傳送反饋、提出建議和提交bugfixes而做出貢獻。已有一些批評提到，TypeScript鼓勵強型別，當前只有Microsoft Visual Studio支援在該語言上方便開發。最初的方案是在其它的編輯器上帶來強型別，、程式碼完成和程式碼重構的功能，但這可能不是一個簡單的任務。此外，支援TypeScript開發的Visual Studio擴充套件不是開源的。最好的TypeScript開發體驗是在Microsoft Windows上，然而隨著時間的流逝以及這種語言的開放性，加之編譯器自我託管，而且用TypeScript自身寫的，這很有可能會改變。透過編譯器的原始碼訪問到AST以及詳細的語言規範文件，社群已開始構建一個跨平臺的編輯器，利用和Visual Studio所用到的相同的語言服務以提供一個增強的編輯體驗。編輯器仍然在概念檢驗的階段，但已經運行於Linux、macOS和Windows，提供功能強度相同的IntelliSense、程式碼完成和句法高亮方法。