TypeScript 2.0 候選版發佈〔譯〕

原文:Announcing TypeScript 2.0 RC
August 30, 2016 by Daniel Rosenwasser

TypeScript 2.0 候選發行版(RC)出來了,離 TypeScript 2.0 最終發佈也就不遠了,贊!如果你還沒開始使用 TypeScript,可以先看看網站上的教程。

要使用 RC 版本,可以下載 TypeScript 2.0 RC for Visual Studio 2015(需要 VS2015 Update 3);也可以通過 NuGet 下載,或者像下面這樣使用 npm:

npm install -g typescript@rc

Visual Studio Code 用戶想使用 RC 版本請參考這裏。

這個 RC 版本讓大家看到 2.0 正式版的樣子,我們通過這個版本廣泛收集用戶反饋,將 2.0 打造得更加穩定可靠。總的來說,一般情況下 RC 版本已經足夠穩定了,並且我們不希望再往上加新的特性。

不過,自 2.0 Beta 發佈以來,已經加了不少東西,所以下面可能會有你尚未聽說的新特性。

推斷類型(Tagged Unions)

譯者注

對於 Tagged Unions 的翻譯,我查了很多資料,在 wiki 上找到如下描述:a tagged union, also called a variant, variant record, discriminated union, disjoint union, or sum type。其中 Variant 這個說法在 VB 中十分常用。在參考了 C# 對 var 關鍵字的翻譯之後,我決定將其翻譯爲“推斷類型”。

推斷類型是一種數據結構,很像聯合(C/C++程序員一定知道這個結構)。它有一個字段(或稱爲屬性)用於識別當前結構的確切類型。(參考 What is a tagged union)

推斷類型使 JavaScript 在某些方向更像 F#、Swift 等語言。爲此,JavaScript 程序員們一定會非常高興。這個特性也叫 可識別聯合互斥聯合 或 代理類型。不過特性本身顯然比名稱更有意思。

假設有兩個類型:Circle 和 Square,然後定義它們的聯合類型,命名爲 Shape


注意 Circle 和 Square 都有一個叫 kind 的字段,保存的字符串常數,表示類型。也就是說 Circle 的 kind 總是"circle"。每個類型都有一個共同的字段,但通過不同的值作爲 標記 區分開來。

在 TypeScript 1.8 中,如果寫一個獲取面積的函數,需要判斷 Shape 的每種類型。

注意到我們爲每種圖形都使用了一箇中間變量來使代碼看起來簡潔。

在 2.0 中就不再需要中間變量了。語言懂得如何通過 kind 來辨別類型,所以你可以少寫點代碼

上面的代碼完全正確,TypeScript 能通過流程控制分析每個分支上的正確類型。可以使用 --noImplicitReturns 和即將可用的 --strictNullChecks 特性保證這些檢查更徹底。

推斷類型讓 JavaScript 這種形式下的代碼更簡潔也更安全。例如,像 Redux 這樣的庫經常使用這種形式的來處理 action。每個獨立的

更多字面類型

1.8 帶來的字符串字面類型非常有用,就像上面看到的那樣,可以用它來處理推斷類型。

除了字符串,我們還想提供更多的類型。在 2.0 中,每個獨特的布爾、數值或枚舉成員都可以擁有自己的類型!

這樣在使用推斷類型時,我們可以快速而地處理一些事情而毫無違和感。

這裏的 Result<T> 類型可能表示失敗。如果表示成功,它有一個值,如果表示失敗,它包含表示失敗原因的 reson 字段。value字段僅在 success 是 true 的時候有效。

你可能已經注意到了,枚舉值也可以擁有它們自己的類型!

Globs語法、包含和排除

譯者注

Globs 直譯是“團塊”的意思,不過這顯然不如 Globs 本身意思明確。所以這裏我沒有翻譯這個詞。關於 Globs,可以參考node-blog 在 README.md 中的說明。

首次向大家介紹 tsconfig.json 文件的時候,手工列出所有文件實在痛苦。TypeScript 1.6 引入了 excludes 配置來緩解這個問題;然而,這顯然不夠。痛苦在於,寫完了每條文件路徑,仍然會有問題發生,結果是因爲忘了排除新文件。

TypeScript 2.0 終於開始支持 Globs 語法。Globs 允許我們在路徑中使用通配符,這樣一來,寫路徑再也不是件乏味的事了。

include 和 exclude 配置中都可以使用 Globs 語法。來看一個 tsconfig.json 的示例:

TypeScript globs 語法支持如下通配符:

  • * 匹配 0 個或多個字符,分隔符(比如 / 或 \)除外

  • ? 精確匹配 1 個字符,分隔符除外

  • **/ 匹配任意層子目錄

接下來的事

之前提到,TypeScript 2.0 很快就發佈了,但是使用 RC 版本帶來的 2.0 的新特性會爲社區發展帶來巨大的作用。

如果發現任何問題,可以 通過Github 反饋給我們。我們非常願意聽到你嘗試之後給我們的反饋。祝愉快!


本文分享自微信公衆號 - 邊城客棧(fancyidea-full)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章