TypeScript
程式語言,編譯成JavaScript的JavaScript超集 来自维基百科,自由的百科全书
TypeScript是由微軟進行開發和維護[4]的一種開源的程式語言。TypeScript是JavaScript的嚴格語法超集,提供了可選的靜態型別檢查。
![]() | 此條目需要更新。 (2021年8月21日) |
TypeScript的知名開發者有C#的首席架構師兼Delphi和Turbo Pascal的創始人——安德斯·海爾斯伯格[5][6][7][8]。
TypeScript是為開發大型應用程式而設計的,且可轉譯成JavaScript[9]。由於TypeScript是JavaScript的嚴格語法超集,因此任何現有的JavaScript程式都是合法的TypeScript程式。
TypeScript支援為現存JavaScript函式庫添加型別資訊的定義檔案,方便其他程式像使用靜態型別的TypeScript實體一樣,使用現有程式庫中的值,就像是C++的標頭檔可以描述目的檔(objectfile)的結構一樣。有許多第三方標頭檔為熱門函式庫像是jQuery、MongoDB、Node.js和D3.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]。大部分主流的文字編輯器,例如:Emacs、Vim、WebStorm、Atom[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支援。
TypeScript添加了ECMAScript 2015標準中定義的類、模組和箭頭函式等語法的支援。
語言特性
TypeScript是一種為JavaScript添加特性的語言擴充。增加的功能包括:
以下功能是從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類型。
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]Bun、Deno等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標準的一部分,在這兩個模式下都可以使用。
- 微軟為Visual Studio 2012和WebMatrix提供了一個外掛程式,在Visual Studio 2013和Visual Studio 2015中內嵌了支援,也為Sublime Text、Emacs和Vim提供了基本的文字編輯器支援。[33]
- Visual Studio Code是一個開源的、跨平台的代碼編輯器,是微軟在Electron的基礎上開發的。它支援TypeScript,同時也支援其他幾個語言,同時提供了除錯和自動代碼補全的功能。
- JetBrains在他們的IDE系列中支援TypeScript,而且已經發行了具有部分支援的PhpStorm 6和WebStorm 6以及IntelliJ IDEA。[34]同時他們的Visual Studio擴充ReSharper (頁面存檔備份,存於網際網路檔案館)8.1也支援。[35]
- 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 (頁面存檔備份,存於網際網路檔案館) — Emacs的TypeScript互動開發環境
開源
TypeScript是開源的,其原始碼可以在Apache 2 License下從Github獲得。這個專案由Microsoft維護,但是任何人可以通過在Github計畫頁傳送回饋、提出建議和提交bugfixes而做出貢獻。[36]
已有一些批評提到,TypeScript鼓勵強型別,當前只有Microsoft Visual Studio支援在該語言上方便開發。最初的方案是在其它的編輯器上帶來強型別,IntelliSense、代碼完成和代碼重構的功能,但這可能不是一個簡單的任務。[37]此外,支援TypeScript開發的Visual Studio擴充不是開源的。最好的TypeScript開發體驗是在Microsoft Windows上,[38]然而隨著時間的流逝以及這種語言的開放性,加之編譯器自我代管,而且用TypeScript自身寫的,這很有可能會改變。通過編譯器的原始碼訪問到AST(抽象句法樹)以及詳細的語言規範文件,社群已開始構建一個跨平台的編輯器,[39][40]利用和Visual Studio所用到的相同的語言服務以提供一個增強的編輯體驗。編輯器仍然在概念檢驗的階段,但已經執行於Linux、macOS和Windows,提供功能強度相同的IntelliSense、代碼完成和句法突顯方法。
參見
參考資料
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.