TypeScript
此條目需要更新。 (2021年8月21日) |
編程範型 | 多範式:函數式、泛型、指令式、物件導向 |
---|---|
設計者 | 微軟 |
實作者 | 微軟 |
釋出時間 | 2012年10月1日[1] |
目前版本 |
|
型態系統 | 鴨子型別, 漸進類型, 結構類型[3] |
特許條款 | Apache 特許條款 2.0 |
副檔名 | .ts, .tsx |
網站 | www |
啟發語言 | |
C#、Java、JavaScript | |
影響語言 | |
AtScript、AssemblyScript |
TypeScript是由微軟進行開發和維護[4]的一種開源的程式語言。TypeScript是JavaScript的嚴格語法超集,提供了可選的靜態型別檢查。
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支援。
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;
}
對於基本類型的批註是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})`;
}
}
函數
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:[來源請求]由於它僅僅是被編譯為標準的JavaScript,一個指令碼既可以被預編譯為JavaScript,也可以通過為TypeScript包含JavaScript編譯器即時編譯。
開發工具
編譯器
TypeScript編譯器,叫做tsc
,本身也是用TypeScript寫成的。可以將TypeScript編譯為可以在任何JavaScript引擎(如瀏覽器)中執行的標準JavaScript。編譯器包也包含了指令碼直譯器,用來執行編譯器。同時也有個Node.js包,在Node.js平台執行。
另外還有一個用JavaScript寫的alpha版本的客戶端編譯器,它在頁面載入時,即時執行TypeScript代碼。[28]
這種編譯器的目前版本預設支援ECMAScript 2015。一個選項是允許以ECMAScript 2015為目標,以利用該版本獨有的語言特性(比如生成器)。類是ECMAScript 2015標準的一部分,在這兩個模式下都可以使用。
IDE和編輯器支援
- 微軟為Visual Studio 2012和WebMatrix提供了一個外掛程式,在Visual Studio 2013和Visual Studio 2015中內嵌了支援,也為Sublime Text、Emacs和Vim提供了基本的文字編輯器支援。[29]
- Visual Studio Code是一個開源的、跨平台的代碼編輯器,是微軟在Electron的基礎上開發的。它支援TypeScript,同時也支援其他幾個語言,同時提供了除錯和自動代碼補全的功能。
- JetBrains在他們的IDE系列中支援TypeScript,而且已經發行了具有部分支援的PhpStorm 6和WebStorm 6以及IntelliJ IDEA。[30]同時他們的Visual Studio擴充ReSharper (頁面存檔備份,存於互聯網檔案館)8.1也支援。[31]
- 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而做出貢獻。[32]
已有一些批評提到,TypeScript鼓勵強型別,當前只有Microsoft Visual Studio支援在該語言上方便開發。最初的方案是在其它的編輯器上帶來強型別,IntelliSense、代碼完成和代碼重構的功能,但這可能不是一個簡單的任務。[33]此外,支援TypeScript開發的Visual Studio擴充不是開源的。最好的TypeScript開發體驗是在Microsoft Windows上,[34]然而隨着時間的流逝以及這種語言的開放性,加之編譯器自我寄存,而且用TypeScript自身寫的,這很有可能會改變。通過編譯器的原始碼訪問到AST(抽象句法樹)以及詳細的語言規範文件,社群已開始構建一個跨平台的編輯器,[35][36]利用和Visual Studio所用到的相同的語言服務以提供一個增強的編輯體驗。編輯器仍然在概念檢驗的階段,但已經執行於Linux、macOS和Windows,提供功能強度相同的IntelliSense、代碼完成和句法突顯方法。
參見
其它編譯為JavaScript的語言
參考資料
- ^ TypeScript. CodePlex. [2015-04-26]. (原始內容存檔於2015-04-03).
- ^ Release 5.6.3. 2024年10月9日 [2024年10月27日].
- ^ Type Compatibility. TypeScript. [2018-03-21]. (原始內容存檔於2018-03-12).
- ^ TypeScript GitHub官网. (原始內容存檔於2017-01-04).
- ^ Foley, Mary Jo. Microsoft takes the wraps off TypeScript, a superset of JavaScript. ZDNet. CBS Interactive. 2012-10-01 [2015-04-26]. (原始內容存檔於2014-11-13).
- ^ Somasegar, S. Somasegar’s blog. Somasegar’s blog. Microsoft. 2012-10-01 [2015-04-26]. (原始內容存檔於2015-04-22).
- ^ Baxter-Reynolds, Matt. Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?. ZDNet. 2012-10-01 [2015-04-26]. (原始內容存檔於2014-08-03).
- ^ Jackson, Joab. Microsoft Augments Javascript for Large-scale Development. CIO. IDG Enterprise. 2012-10-01 [2015-04-26]. (原始內容存檔於2013-12-17).
- ^ Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem? | Ars Technica. [2012-10-09]. (原始內容存檔於2015-03-29).
- ^ Microsoft augments JavaScript for large-scale development. InfoWorld. IDG. 1 October 2012 [26 April 2015]. (原始內容存檔於2013-05-31).
- ^ Turner, Jonathan. Announcing TypeScript 1.0. TypeScript Language team blog. Microsoft. 2 April 2014 [26 April 2015]. (原始內容存檔於2015-05-02).
- ^ Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?. ZDNet. 1 October 2012 [12 October 2012]. (原始內容存檔於2014-08-03).
And I think this is a pretty big misstep. If you're building web apps that run on anything other than Windows, you're likely using a Mac and most likely not using Visual Studio. You need the Visual Studio plug-in to get the IntelliSense. All you get without Visual Studio is the strong-typing. You don't get the productivity benefits you get from IntelliSense..
- ^ Miguel de Icaza. TypeScript: First Impressions. 1 October 2012 [12 October 2012]. (原始內容存檔於2019-02-24).
But TypeScript only delivers half of the value in using a strongly typed language to Unix developers: strong typing. Intellisense, code completion and refactoring are tools that are only available to Visual Studio Professional users on Windows. There is no Eclipse, MonoDevelop or Emacs support for any of the language features
- ^ TypeScript-Unterstützung für Eclipse. heise Developer. 6 August 2013 [26 April 2015]. (原始內容存檔於2018-07-11).
- ^ TypeScript. Eclipse Marketplace. Eclipse Foundation. [26 April 2015]. (原始內容存檔於2018-10-10).
- ^ TypeStrong: The only TypeScript package you will ever need. [21 July 2016]. (原始內容存檔於2018-12-19).
- ^ Hillar, Gastón. Working with TypeScript in Visual Studio 2012. Dr. Dobb's Journal. 14 May 2013 [26 April 2015]. (原始內容存檔於2018-09-29).
- ^ TypeScript 0.9 arrives with new compiler, support for generics. The Register. 18 June 2013 [26 April 2015]. (原始內容存檔於2018-03-11).
- ^ Hejlsberg, Anders. TypeScript. Channel 9. Microsoft. 2 April 2014 [26 April 2015]. (原始內容存檔於2015-05-25).
- ^ Jackson, Joab. Microsoft TypeScript graduates to Visual Studio. PC World. IDG. 25 February 2014 [26 April 2015]. (原始內容存檔於2016-03-11).
- ^ Turner, Jonathan. New Compiler and Moving to GitHub. TypeScript Language team blog. Microsoft. 21 July 2014 [26 April 2015]. (原始內容存檔於2015-10-27).
- ^ Bright, Peter. TypeScript, Microsoft's JavaScript for big applications, reaches version 2.0. Ars Technica. Condé Nast. 22 September 2016 [22 September 2016]. (原始內容存檔於2018-12-21).
- ^ Announcing TypeScript 3.0. 30 July 2018 [16 March 2020]. (原始內容存檔於2020-05-30).
- ^ TypeScript 3.0. 30 July 2018 [16 March 2020]. (原始內容存檔於2020-06-06).
- ^ Anders Hejlsberg. What is TypeScript and why with Anders Hejlsberg. www.hanselminutes.com. 5 October 2012 [15 January 2014]. (原始內容存檔於2018-12-27).
- ^ S. Somasegar. TypeScript: JavaScript Development at Application Scale. msdn.com. 1 October 2012 [27 November 2013]. (原始內容存檔於2015-04-22).
- ^ 存档副本. [2012-11-10]. (原始內容存檔於2012-11-13).
- ^ niutech/typescript-compile. GitHub. [2015-04-26]. (原始內容存檔於2018-06-11).
- ^ Olivier Bloch. Sublime Text, Vi, Emacs: TypeScript enabled!. Microsoft. 2012-10-01 [2012-10-28]. (原始內容存檔於2012-10-29).
- ^ TypeScript support in WebStorm 6. JetBrains. [2016-12-17]. (原始內容存檔於2016-06-02).
- ^ TypeScript support in ReSharper 8.1. JetBrains. [2016-12-17]. (原始內容存檔於2014-02-02).
- ^ 存档副本. [2016-12-17]. (原始內容存檔於2017-01-04).
- ^ Miguel de Icaza. TypeScript: First Impressions. 2012-10-01 [2012-10-12]. (原始內容存檔於2019-02-24).
But TypeScript only delivers half of the value in using a strongly typed language to Unix developers: strong typing. Intellisense, code completion and refactoring are tools that are only available to Visual Studio Professional users on Windows. There is no Eclipse, MonoDevelop or Emacs support for any of the language features
- ^ Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?. ZDNet. 2012-10-01 [2012-10-12]. (原始內容存檔於2014-08-03).
And I think this is a pretty big misstep. If you're building web apps that run on anything other than Windows, you're likely using a Mac and most likely not using Visual Studio. You need the Visual Studio plug-in to get the IntelliSense. All you get without Visual Studio is the strong-typing. You don't get the productivity benefits you get from IntelliSense..
- ^ Code Assistant for TypeScript. [2013-01-07]. (原始內容存檔於2013-01-21).
- ^ TypeScript Editor. 2012-11-21 [2013-01-07]. (原始內容存檔於2013-02-18).