摘要:相關鏈接正式版已經發布了譯正式版發布不過可能大家更關心的是譯的新特性原文候選發行版出來了,離最終發布也就不遠了,贊如果你還沒開始使用,可以先看看網站上的教程。其中這個說法在中十分常用。它有一個字段或稱為屬性用于識別當前結構的確切類型。
相關鏈接
TypeScript 2.0 正式版已經發布了:〔譯〕TypeScript 2.0 正式版發布
不過可能大家更關心的是 〔譯〕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。
interface Circle { kind: "circle"; radius: number; } interface Square { kind: "square"; sideLength: number; } type Shape = Circle | Square;
注意 Circle 和 Square 都有一個叫 kind 的字段,保存的字符串常數,表示類型。也就是說 Circle 的 kind 總是 "circle"。每個類型都有一個共同的字段,但通過不同的值作為 標記 區分開來。
在 TypeScript 1.8 中,如果寫一個獲取面積的函數,需要判斷 Shape 的每種類型。
function getArea(shape: Shape) { switch (shape.kind) { case "circle": // 從 "Shape" 轉換為 "Circle" let c = shape as Circle; return Math.PI * c.radius ** 2; case "square": // 從 "Shape" 轉換為 "Square" let sq = shape as Square; return sq.sideLength ** 2; } }
注意到我們為每種圖形都使用了一個中間變量來使代碼看起來簡潔。
在 2.0 中就不再需要中間變量了。語言懂得如何通過 kind 來辨別類型,所以你可以少寫點代碼
function getArea(shape: Shape) { switch (shape.kind) { case "circle": // 這里 "shape" 是 "Circle" return Math.PI * shape.radius ** 2; case "square": // 這里 "shape" 是 "Square" return shape.sideLength ** 2; } }
上面的代碼完全正確,TypeScript 能通過流程控制分析每個分支上的正確類型。可以使用 --noImplicitReturns 和即將可用的 --strictNullChecks 特性保證這些檢查更徹底。
推斷類型讓 JavaScript 這種形式下的代碼更簡潔也更安全。例如,像 Redux 這樣的庫經常使用這種形式的來處理 action。每個獨立的
更多字面類型1.8 帶來的字符串字面類型非常有用,就像上面看到的那樣,可以用它來處理推斷類型。
除了字符串,我們還想提供更多的類型。在 2.0 中,每個獨特的布爾、數值或枚舉成員都可以擁有自己的類型!
type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; let nums: Digit[] = [1, 2, 4, 8]; // 錯誤! "16" 不是 "Digit"! nums.push(16);
這樣在使用推斷類型時,我們可以快速而地處理一些事情而毫無違和感。
interface Success{ success: true; value: T; } interface Failure { success: false; reason: string; } type Result = Success | Failure;
這里的 Result
declare function tryGetNumUsers(): Result; let result = tryGetNumUsers(); if (result.success === true) { // "result" 是 "Success " 類型的 console.log(`Server reported ${result.value} users`); } else { // "result"是 "Failure" 類型的 console.error("Error fetching number of users!", result.reason); }
你可能已經注意到了,枚舉值也可以擁有它們自己的類型!
enum ActionType { Append, Erase } interface AppendAction { type: ActionType.Append; text: string; } interface EraseAction { type: ActionType.Erase; numChars: number; } function updateText(currentText: string, action: AppendAction | EraseAction) { if (action.type === ActionType.Append) { // "action" has type "AppendAction" return currentText + action.text; } else { // "action" has type "EraseAction" return currentText.slice(0, -action.numChars); } }Globs語法、包含和排除
譯者注
Globs 直譯是“團塊”的意思,不過這顯然不如 Globs 本身意思明確。所以這里我沒有翻譯這個詞。關于 Globs,可以參考 node-blog 在 README.md 中的說明。
首次向大家介紹 tsconfig.json 文件的時候,手工列出所有文件實在痛苦。TypeScript 1.6 引入了 excludes 配置來緩解這個問題;然而,這顯然不夠。痛苦在于,寫完了每條文件路徑,仍然會有問題發生,結果是因為忘了排除新文件。
TypeScript 2.0 終于開始支持 Globs 語法。Globs 允許我們在路徑中使用通配符,這樣一來,寫路徑再也不是件乏味的事了。
include 和 exclude 配置中都可以使用 Globs 語法。來看一個 tsconfig.json 的示例:
{ "include": [ "./src/**/*.ts" ], "exclude": [ "./src/tests/**" ] }
TypeScript globs 語法支持如下通配符:
* 匹配 0 個或多個字符,分隔符(比如 / 或 )除外
? 精確匹配 1 個字符,分隔符除外
**/ 匹配任意層子目錄
接下來的事之前提到,TypeScript 2.0 很快就發布了,但是使用 RC 版本帶來的 2.0 的新特性會為社區發展帶來巨大的作用。
如果發現任何問題,可以 通過Github 反饋給我們。我們非常愿意聽到你嘗試之后給我們的反饋。祝愉快!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80348.html
摘要:中即將推出的變化輸入提升自發布以來,我們一直在收到更好的集成請求。然而,當使用開箱即用的時,目前的集成有些缺乏。例如,不能輕易地推斷使用的基于對象的默認中的類型。這也使得將現有代碼庫遷移到更具挑戰性。 Vue 2.5中即將推出的TypeScript變化 輸入提升 自Vue 2.0發布以來,我們一直在收到更好的 TypeScript 集成請求。 自從發布以來,我們已經為大多數核心庫(vu...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 2504·2021-11-15 11:38
閱讀 1948·2021-11-05 09:37
閱讀 2257·2021-10-08 10:12
閱讀 2807·2019-08-30 15:55
閱讀 2112·2019-08-30 15:52
閱讀 1221·2019-08-29 13:24
閱讀 463·2019-08-26 18:27
閱讀 1473·2019-08-26 18:27