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.