〔译〕TypeScript 2.0 正式发布
譯者注:可能大家更關(guān)心的是 〔譯〕TypeScript 2.0 的新特性
[原文]
TypeScript 2.0 is now available!
September 22, 2016 by Daniel Rosenwasser
今天非常高興的通知大家,TypeScript 2.0 正式版發(fā)布了!
TypeScript 2.0 對(duì)于產(chǎn)品團(tuán)隊(duì)來(lái)說(shuō)是個(gè)偉大的歷程,這個(gè)歷程少不了來(lái)自社區(qū)和合作伙伴的貢獻(xiàn)。這個(gè)版本帶來(lái)了一些新的特性,可以提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。這個(gè)版本使 TypeScript 更加接近 ECMAScript 的發(fā)展,為 JavaScript 庫(kù)和工具提供了更為廣泛的支持。它通過(guò)編輯類(lèi)工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。
要使用 TypeScript 2.0,可以下載 TypeScript 2.0 for Visual Studio 2015 (需要更新到 Update3),或者從 NuGet 獲取,或者在 Visual Studio Code 中使用 TypeScript 2.0,或者通過(guò) NPM 安裝:
npm install -g typescript@2.0要在 Visual Studio "15" 預(yù)覽版使用 TypeScript 2.0 需要等到下一個(gè)預(yù)覽版發(fā)布。
2.0 歷程
幾年前我就們踏上了 2.0 版本的歷程。TypeScript 1.0 成功地向開(kāi)發(fā)人員展示了 JavaScript 與靜態(tài)類(lèi)型結(jié)合和潛能。編譯器的錯(cuò)誤檢查節(jié)約了大量用于查找 BUG 的時(shí)間。在開(kāi)發(fā)者們開(kāi)始創(chuàng)建越來(lái)越大的 JavaScript 應(yīng)用時(shí),TypeScript 的編輯器類(lèi)工具帶來(lái)了巨大的開(kāi)發(fā)效率提升。然而 JavaScript 是世界上最流行最廣泛使用的語(yǔ)言,作為它的超集,TypeScript 還有很長(zhǎng)的路要走。
TypeScript 1.1 完全重寫(xiě)了編譯器,這帶來(lái)4倍效率提升。新的編譯器核心更加靈活,更快速地迭代,這為以后的版本打下了基礎(chǔ)。幾乎同時(shí),TypeScript 代碼庫(kù)遷移到 GitHub,這個(gè)鼓勵(lì)社區(qū)參與并提供了更好協(xié)作平臺(tái)地方。
TS 1.4 和 1.5 主要致力于支持 ES2015/ES6,以期與 JavaScript 語(yǔ)言的發(fā)展同步。TypeScript 1.5 還引入了對(duì)模塊和修飾符〔譯者注:類(lèi)似 Java 中的"注解(Annotation)”,C# 中的“特性(Attribute)”〕,允許 Angular 2 采用 TypeScript,并與我們的合作一起改進(jìn) TypeScript。
TypeScript 1.6-1.8(1.6, 1.7, 1.8) 對(duì)類(lèi)型系統(tǒng)進(jìn)行了重大改進(jìn),每一個(gè)版本的發(fā)布都讓 JavaScript 模式更加清晰,同時(shí)也為主要的 JavaScript 庫(kù)提供支持。這些發(fā)布版本同樣圍繞著對(duì) ES* 的支持,并在快速(譯者注:原文 out-of-the-box 是開(kāi)箱即用的意思,引申為快速)檢查錯(cuò)誤方面提升了編譯器,使之先進(jìn)不少。
今天,TypeScript 語(yǔ)言 2.0 發(fā)布讓我們激動(dòng)不已。在這個(gè)版本的 TypeScript 更加接近 ECMAScript 規(guī)范,更廣泛地支持 JavaScript 庫(kù)和工具,以及非常棒的語(yǔ)言服務(wù)用以向所有主要編輯器提供最佳的編輯體驗(yàn)。所以有些合在一起,就能提供最更高效,更靈活的 JavaScript 開(kāi)發(fā)體驗(yàn)。
TypeScript 社區(qū)
從 1.0 開(kāi)始,TypeScript 就不只是一門(mén)語(yǔ)言,它也成長(zhǎng)成一個(gè)社區(qū)。僅上個(gè)月,TypeScript 在 NPM 上就有 200 萬(wàn)的下載量,而去年同期只有 27.5 萬(wàn)。此外,我們的每日構(gòu)建版本吸引了超過(guò) 2000 用戶(hù)在 GibHub 上參與討論,以及 1500 用戶(hù)提交問(wèn)題。我們也接受了來(lái)自 150 余位用戶(hù)的 PR〔譯者注:Pull Request〕,范圍包括修復(fù)BUG、原型和主要特性等。
DefinitelyTyped 是我們的社區(qū)發(fā)展越來(lái)越好的另一個(gè)例子。它從一個(gè)關(guān)于申明文件(用 TypeScript 描述你的 JS 庫(kù)接口的文件)的小代碼庫(kù)開(kāi)始,現(xiàn)在已經(jīng)包含超過(guò) 2000 個(gè)庫(kù)的申明,這些申明是 2500 多個(gè)人捐獻(xiàn)的手工代碼。它是目前我們所知道的最大的正規(guī)申明。通過(guò)建立 DefinitelyTyped,TypeScript 社區(qū)變得不僅僅支持使用已經(jīng)存在的 JavaScript 庫(kù),還更好的定義了我們所有 JavaScript 代碼的理解。
TypeScript 社區(qū)和更大的 JavaScript 社區(qū)為 TypeScript 迄今為止取得的成功發(fā)揮了重要作用。無(wú)論你捐獻(xiàn)代碼、宣傳、測(cè)試、提交問(wèn)題,還是在項(xiàng)目中使用 TypeScript,我們都對(duì)你的長(zhǎng)期支持表示感謝!
TypeScript 2.0 有什么新鮮玩意兒?
TypeScript 2.0 帶來(lái)了一些 1.8 所不具有的新特性,其中一些我們已經(jīng)在 2.0 Beta 版和候選版的博客中詳細(xì)說(shuō)明了。下面會(huì)介紹一些現(xiàn)在剛具備的重要特性。你可以在我們的 WIKI 上閱讀推斷類(lèi)型、never 類(lèi)型、用于函數(shù)的 this 類(lèi)型、tsconfig 對(duì) glob 的支持 等。
獲取簡(jiǎn)易申明文件 (.d.ts)
typings 和 tsd 已經(jīng)成為T(mén)ypeScript 生態(tài)系統(tǒng)中極好的工具。直到現(xiàn)在,這些包管理工具幫助用戶(hù)快速地從 DefinitelyTyped 取得 .d.ts 文件,用于他們的項(xiàng)目。雖然有這些工具,對(duì)新用戶(hù)來(lái)說(shuō),學(xué)習(xí)如何通過(guò)這些包管理工具獲得和管理申明文件的依賴(lài)關(guān)系仍然是件痛苦的事情。
在 2.0 中獲取和使用申明文件會(huì)更容易,比如想獲取 lodash 的申明文件,只需要使用 NPM:
npm install -s @types/lodash上面的命名安裝了一個(gè)范圍包 @type/lodash,這使得 TypeScript 2.0 能在程序中導(dǎo)入(import) lodash 時(shí)自動(dòng)引用 lodash 的申明。這就是說(shuō)你不需要其它工具,你的 .d.ts 文件就能找到 package.json 中剩下的依賴(lài)。
值得注意的是,typeing 和 tsd 能在已經(jīng)存在的項(xiàng)目里繼續(xù)使用,然而兼容 2.0 的申明文件不再會(huì)再通過(guò)這些工具生效。因此,我們強(qiáng)烈推薦使用 TypeScript 2.0 及以后版本的 NPM 流程。
非常感謝 Blake Embrey 在 typings 的工作,是他的工作推進(jìn)了這項(xiàng)解決方案。
非空類(lèi)型
JavaScript 有兩個(gè)值用于表示“空”——null 和 undefined。如果 null 是一個(gè)價(jià)值十億美元的錯(cuò)誤,undefined 會(huì)給我們帶來(lái)加倍的損失。在 JavaScript 的世界,這兩個(gè)值是巨大的錯(cuò)誤來(lái)源,因?yàn)橛脩?hù)經(jīng)常會(huì)忘記分辨 API 中返回的 null 或 undefined 值。
TypeScript 最初的想法是所有類(lèi)型都是可空的。這就是說(shuō),某個(gè)數(shù)值類(lèi)型也可能出現(xiàn) null 或 undefined 值。很不幸,這并不能很好的解決 null/undefined 的問(wèn)題。
在 TypeScript 2.0 中,null and undefined 擁有它們自己的類(lèi)型,這讓開(kāi)發(fā)者可以明確的表達(dá)是否允許 null/undefined?,F(xiàn)在如果某個(gè)東西可以是數(shù)值或者 null 值,你可以使用聯(lián)合類(lèi)型 number | null(讀作“number 或 null”)。
因?yàn)檫@是一個(gè)破壞性的改變,我們選項(xiàng)里添加了 --strictNullChecks 模式來(lái)允許這種行為。然后在往后的發(fā)展中,打開(kāi)這個(gè)選項(xiàng)會(huì)成為一個(gè)一般的最佳實(shí)踐,這有肋于捕捉大范圍的 null/undeined 錯(cuò)誤。如果想關(guān)于非空類(lèi)型的信息,請(qǐng)移步 GitHub 上的 Pull Request。
這里有一個(gè)關(guān)于非空類(lèi)型的視頻
控制流程分析的類(lèi)型
從 1.8 開(kāi)始,TypeScript 就已經(jīng)存在控制流分析,但是從 2.0 開(kāi)始我們擴(kuò)展了分析范圍,以對(duì)于在任何地方都能分析出可能的類(lèi)型?,F(xiàn)在,配合非空類(lèi)型,TypeScript 能做更多復(fù)雜的檢查,比如明確的賦值分析。
function f(condition: boolean) {let result: number;if (condition) {result = computeImportantStuff();}// 哇哦! 'result' 可能從未初始化!return result; }非常感謝 Ivo Gabe de Wolff 對(duì)這個(gè)特性初期的貢獻(xiàn)以及后來(lái)提供的大量反饋。你可以在 PR 中信息。
readonly 修飾詞
TypeScript 中的不可變編程變得容易了。從 TypeScript 2.0 開(kāi)始,你可以定義屬性為只讀。
class Person {readonly name: string;constructor(name: string) {if (name.length < 1) {throw new Error("Empty name!");}this.name = name;} }// 錯(cuò)誤!'name' 是只讀的。 new Person("Daniel").name = "Dan";所有沒(méi)有匹配設(shè)置器的獲取器都被認(rèn)為是只讀的。
展望
TypeScript 從 JavaScript 而來(lái)。正如現(xiàn)在成千上成的 JavaScript 開(kāi)發(fā)者所知道的那樣,TypeScript 開(kāi)始于 JavaScript 相同的語(yǔ)法和語(yǔ)義,允許開(kāi)發(fā)者使用已經(jīng)存在的 JavaScript 代碼,使用流行的 JavaScript 庫(kù),也可以從 JavaScript 中調(diào)用 TypeScript 代碼。JavaScript 可選的靜態(tài)類(lèi)型使 JavaScript 開(kāi)發(fā)者在開(kāi)發(fā) JavaScript 應(yīng)用時(shí),可以使用高效的開(kāi)發(fā)工工具和實(shí)踐,比如靜態(tài)檢查,反射等。
我們會(huì)聯(lián)合合作伙伴和社區(qū)的力量繼續(xù)發(fā)展 JavaScript 的類(lèi)型系統(tǒng),讓用戶(hù)可以更深層次的將靜態(tài)類(lèi)型方法用于 JavaScript。同時(shí),我們會(huì)致力于提高 TypeScript 語(yǔ)言服務(wù)和一系列的工具特性,使開(kāi)發(fā)工具變得更智能,以提高開(kāi)發(fā)者的工作效率。
向所有一路走來(lái)到 2.0 的人致謝!你們的反饋和熱情帶來(lái)了 TypeScript 及其生態(tài)如今的成就。希望你們對(duì) 2.0 的興奮程度不亞于我們。
如果你還未使用 TypeScript,一定試試!我們非常愿意聽(tīng)到你的聲音。
祝愉快
TypeScript 團(tuán)隊(duì)
總結(jié)
以上是生活随笔為你收集整理的〔译〕TypeScript 2.0 正式发布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Tomcat启动脚本startup.sh
- 下一篇: Task Runner Explorer