譯者注:可能你們更關心的是 〔譯〕TypeScript 2.0 的新特性git
[原文]
TypeScript 2.0 is now available!
September 22, 2016 by Daniel Rosenwassergithub
今天很是高興的通知你們,TypeScript 2.0 正式版發佈了!typescript
TypeScript 2.0 對於產品團隊來講是個偉大的歷程,這個歷程少不了來自社區和合做夥伴的貢獻。這個版本帶來了一些新的特性,能夠提升開發人員的開發效率。這個版本使 TypeScript 更加接近 ECMAScript 的發展,爲 JavaScript 庫和工具提供了更爲普遍的支持。它經過編輯類工具,帶來了先進的編輯體驗,加強了語言服務。npm
要使用 TypeScript 2.0,能夠下載 TypeScript 2.0 for Visual Studio 2015 (須要更新到 Update3),或者從 NuGet 獲取,或者在 Visual Studio Code 中使用 TypeScript 2.0,或者經過 NPM 安裝:編程
npm install -g typescript@2.0
要在 Visual Studio "15" 預覽版使用 TypeScript 2.0 須要等到下一個預覽版發佈。json
幾年前我就們踏上了 2.0 版本的歷程。TypeScript 1.0 成功地向開發人員展現了 JavaScript 與靜態類型結合和潛能。編譯器的錯誤檢查節約了大量用於查找 BUG 的時間。在開發者們開始建立愈來愈大的 JavaScript 應用時,TypeScript 的編輯器類工具帶來了巨大的開發效率提高。然而 JavaScript 是世界上最流行最普遍使用的語言,做爲它的超集,TypeScript 還有很長的路要走。segmentfault
TypeScript 1.1 徹底重寫了編譯器,這帶來4倍效率提高。新的編譯器核心更加靈活,更快速地迭代,這爲之後的版本打下了基礎。幾乎同時,TypeScript 代碼庫遷移到 GitHub,這個鼓勵社區參與並提供了更好協做平臺地方。windows
TS 1.4 和 1.5 主要致力於支持 ES2015/ES6,以期與 JavaScript 語言的發展同步。TypeScript 1.5 還引入了對模塊和修飾符〔譯者注:相似 Java 中的"註解(Annotation)」,C# 中的「特性(Attribute)」〕,容許 Angular 2 採用 TypeScript,並與咱們的合做一塊兒改進 TypeScript。bash
TypeScript 1.6-1.8(1.6, 1.7, 1.8) 對類型系統進行了重大改進,每個版本的發佈都讓 JavaScript 模式更加清晰,同時也爲主要的 JavaScript 庫提供支持。這些發佈版本一樣圍繞着對 ES* 的支持,並在快速(譯者注:原文 out-of-the-box 是開箱即用的意思,引伸爲快速)檢查錯誤方面提高了編譯器,使之先進很多。編輯器
今天,TypeScript 語言 2.0 發佈讓咱們激動不已。在這個版本的 TypeScript 更加接近 ECMAScript 規範,更普遍地支持 JavaScript 庫和工具,以及很是棒的語言服務用以向全部主要編輯器提供最佳的編輯體驗。因此有些合在一塊兒,就能提供最更高效,更靈活的 JavaScript 開發體驗。
從 1.0 開始,TypeScript 就不僅是一門語言,它也成長成一個社區。僅上個月,TypeScript 在 NPM 上就有 200 萬的下載量,而去年同期只有 27.5 萬。此外,咱們的每日構建版本吸引了超過 2000 用戶在 GibHub 上參與討論,以及 1500 用戶提交問題。咱們也接受了來自 150 餘位用戶的 PR〔譯者注:Pull Request〕,範圍包括修復BUG、原型和主要特性等。
DefinitelyTyped 是咱們的社區發展愈來愈好的另外一個例子。它從一個關於申明文件(用 TypeScript 描述你的 JS 庫接口的文件)的小代碼庫開始,如今已經包含超過 2000 個庫的申明,這些申明是 2500 多我的捐獻的手工代碼。它是目前咱們所知道的最大的正規申明。經過創建 DefinitelyTyped,TypeScript 社區變得不只僅支持使用已經存在的 JavaScript 庫,還更好的定義了咱們全部 JavaScript 代碼的理解。
TypeScript 社區和更大的 JavaScript 社區爲 TypeScript 迄今爲止取得的成功發揮了重要做用。不管你捐獻代碼、宣傳、測試、提交問題,仍是在項目中使用 TypeScript,咱們都對你的長期支持表示感謝!
TypeScript 2.0 帶來了一些 1.8 所不具備的新特性,其中一些咱們已經在 2.0 Beta 版和候選版的博客中詳細說明了。下面會介紹一些如今剛具有的重要特性。你能夠在咱們的 WIKI 上閱讀推斷類型、never
類型、用於函數的 this 類型、tsconfig 對 glob 的支持 等。
typings 和 tsd 已經成爲TypeScript 生態系統中極好的工具。直到如今,這些包管理工具幫助用戶快速地從 DefinitelyTyped 取得 .d.ts 文件,用於他們的項目。雖然有這些工具,對新用戶來講,學習如何經過這些包管理工具得到和管理申明文件的依賴關係仍然是件痛苦的事情。
在 2.0 中獲取和使用申明文件會更容易,好比想獲取 lodash 的申明文件,只須要使用 NPM:
npm install -s @types/lodash
上面的命名安裝了一個範圍包 @type/lodash,這使得 TypeScript 2.0 能在程序中導入(import
) lodash 時自動引用 lodash 的申明。這就是說你不須要其它工具,你的 .d.ts 文件就能找到 package.json 中剩下的依賴。
值得注意的是,typeing 和 tsd 能在已經存在的項目裏繼續使用,然而兼容 2.0 的申明文件再也不會再經過這些工具生效。所以,咱們強烈推薦使用 TypeScript 2.0 及之後版本的 NPM 流程。
很是感謝 Blake Embrey 在 typings 的工做,是他的工做推動了這項解決方案。
JavaScript 有兩個值用於表示「空」——null
和 undefined
。若是 null
是一個價值十億美圓的錯誤,undefined
會給咱們帶來加倍的損失。在 JavaScript 的世界,這兩個值是巨大的錯誤來源,由於用戶常常會忘記分辨 API 中返回的 null
或 undefined
值。
TypeScript 最初的想法是全部類型都是可空的。這就是說,某個數值類型也可能出現 null
或 undefined
值。很不幸,這並不能很好的解決 null
/undefined
的問題。
在 TypeScript 2.0 中,null
and undefined
擁有它們本身的類型,這讓開發者能夠明確的表達是否容許 null
/undefined
。如今若是某個東西能夠是數值或者 null
值,你可使用聯合類型 number | null
(讀做「number 或 null」)。
由於這是一個破壞性的改變,咱們選項裏添加了 --strictNullChecks
模式來容許這種行爲。而後在日後的發展中,打開這個選項會成爲一個通常的最佳實踐,這有肋於捕捉大範圍的 null
/undeined
錯誤。若是想閱讀更多關於非空類型的信息,請移步 GitHub 上的 Pull Request。
從 1.8 開始,TypeScript 就已經存在控制流分析,可是從 2.0 開始咱們擴展了分析範圍,以對於在任何地方都能分析出可能的類型。如今,配合非空類型,TypeScript 能作更多複雜的檢查,好比明確的賦值分析。
function f(condition: boolean) { let result: number; if (condition) { result = computeImportantStuff(); } // 哇哦! 'result' 可能從未初始化! return result; }
很是感謝 Ivo Gabe de Wolff 對這個特性初期的貢獻以及後來提供的大量反饋。你能夠在 PR 中閱讀更多信息。
readonly
修飾詞TypeScript 中的不可變編程變得容易了。從 TypeScript 2.0 開始,你能夠定義屬性爲只讀。
class Person { readonly name: string; constructor(name: string) { if (name.length < 1) { throw new Error("Empty name!"); } this.name = name; } } // 錯誤!'name' 是隻讀的。 new Person("Daniel").name = "Dan";
全部沒有匹配設置器的獲取器都被認爲是隻讀的。
TypeScript 從 JavaScript 而來。正如如今成千上成的 JavaScript 開發者所知道的那樣,TypeScript 開始於 JavaScript 相同的語法和語義,容許開發者使用已經存在的 JavaScript 代碼,使用流行的 JavaScript 庫,也能夠從 JavaScript 中調用 TypeScript 代碼。JavaScript 可選的靜態類型使 JavaScript 開發者在開發 JavaScript 應用時,可使用高效的開發工工具和實踐,好比靜態檢查,反射等。
咱們會聯合合做夥伴和社區的力量繼續發展 JavaScript 的類型系統,讓用戶能夠更深層次的將靜態類型方法用於 JavaScript。同時,咱們會致力於提升 TypeScript 語言服務和一系列的工具特性,使開發工具變得更智能,以提升開發者的工做效率。
向全部一路走來到 2.0 的人致謝!大家的反饋和熱情帶來了 TypeScript 及其生態現在的成就。但願大家對 2.0 的興奮程度不亞於咱們。
若是你還未使用 TypeScript,必定試試!咱們很是願意聽到你的聲音。
祝愉快
TypeScript 團隊