成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

〔譯〕TypeScript 2.0 候選版發(fā)布

Maxiye / 663人閱讀

摘要:相關(guān)鏈接正式版已經(jīng)發(fā)布了譯正式版發(fā)布不過可能大家更關(guān)心的是譯的新特性原文候選發(fā)行版出來了,離最終發(fā)布也就不遠(yuǎn)了,贊如果你還沒開始使用,可以先看看網(wǎng)站上的教程。其中這個(gè)說法在中十分常用。它有一個(gè)字段或稱為屬性用于識(shí)別當(dāng)前結(jié)構(gòu)的確切類型。

相關(guān)鏈接

TypeScript 2.0 正式版已經(jīng)發(fā)布了:〔譯〕TypeScript 2.0 正式版發(fā)布
不過可能大家更關(guān)心的是 〔譯〕TypeScript 2.0 的新特性

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

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

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

npm install -g typescript@rc

Visual Studio Code 用戶想使用 RC 版本請(qǐng)參考這里。

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

不過,自 2.0 Beta 發(fā)布以來,已經(jīng)加了不少東西,所以下面可能會(huì)有你尚未聽說的新特性。

推斷類型(Tagged Unions)

譯者注

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

推斷類型是一種數(shù)據(jù)結(jié)構(gòu),很像聯(lián)合(C/C++程序員一定知道這個(gè)結(jié)構(gòu))。它有一個(gè)字段(或稱為屬性)用于識(shí)別當(dāng)前結(jié)構(gòu)的確切類型。(參考 What is a tagged union)

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

假設(shè)有兩個(gè)類型:CircleSquare,然后定義它們的聯(lián)合類型,命名為 Shape。

interface Circle {
    kind: "circle";
    radius: number;
}

interface Square {
    kind: "square";
    sideLength: number;
}

type Shape = Circle | Square;

注意 CircleSquare 都有一個(gè)叫 kind 的字段,保存的字符串常數(shù),表示類型。也就是說 Circlekind 總是 "circle"。每個(gè)類型都有一個(gè)共同的字段,但通過不同的值作為 標(biāo)記 區(qū)分開來。

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

function getArea(shape: Shape) {
    switch (shape.kind) {
        case "circle":
            // 從 "Shape" 轉(zhuǎn)換為 "Circle"
            let c = shape as Circle;
            return Math.PI * c.radius ** 2;

        case "square":
            // 從 "Shape" 轉(zhuǎn)換為 "Square"
            let sq = shape as Square;
            return sq.sideLength ** 2;
    }
}

注意到我們?yōu)槊糠N圖形都使用了一個(gè)中間變量來使代碼看起來簡(jiǎn)潔。

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

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 能通過流程控制分析每個(gè)分支上的正確類型??梢允褂?--noImplicitReturns 和即將可用的 --strictNullChecks 特性保證這些檢查更徹底。

推斷類型讓 JavaScript 這種形式下的代碼更簡(jiǎn)潔也更安全。例如,像 Redux 這樣的庫經(jīng)常使用這種形式的來處理 action。每個(gè)獨(dú)立的

更多字面類型

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

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

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
let nums: Digit[] = [1, 2, 4, 8];

// 錯(cuò)誤! "16" 不是 "Digit"!
nums.push(16);

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

interface Success {
    success: true;
    value: T;
}

interface Failure {
    success: false;
    reason: string;
}

type Result = Success | Failure;

這里的 Result 類型可能表示失敗。如果表示成功,它有一個(gè)值,如果表示失敗,它包含表示失敗原因的 reson 字段。value 字段僅在 successtrue 的時(shí)候有效。

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);
}

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

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 直譯是“團(tuán)塊”的意思,不過這顯然不如 Globs 本身意思明確。所以這里我沒有翻譯這個(gè)詞。關(guān)于 Globs,可以參考 node-blog 在 README.md 中的說明。

首次向大家介紹 tsconfig.json 文件的時(shí)候,手工列出所有文件實(shí)在痛苦。TypeScript 1.6 引入了 excludes 配置來緩解這個(gè)問題;然而,這顯然不夠。痛苦在于,寫完了每條文件路徑,仍然會(huì)有問題發(fā)生,結(jié)果是因?yàn)橥伺懦挛募?/p>

TypeScript 2.0 終于開始支持 Globs 語法。Globs 允許我們?cè)诼窂街惺褂猛ㄅ浞?,這樣一來,寫路徑再也不是件乏味的事了。

includeexclude 配置中都可以使用 Globs 語法。來看一個(gè) tsconfig.json 的示例:

{
    "include": [
        "./src/**/*.ts"
    ],
    "exclude": [
        "./src/tests/**"
    ]
}

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

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

? 精確匹配 1 個(gè)字符,分隔符除外

**/ 匹配任意層子目錄

接下來的事

之前提到,TypeScript 2.0 很快就發(fā)布了,但是使用 RC 版本帶來的 2.0 的新特性會(huì)為社區(qū)發(fā)展帶來巨大的作用。

如果發(fā)現(xiàn)任何問題,可以 通過Github 反饋給我們。我們非常愿意聽到你嘗試之后給我們的反饋。祝愉快!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80348.html

相關(guān)文章

  • []Vue 2.5中即將推出的TypeScript變化

    摘要:中即將推出的變化輸入提升自發(fā)布以來,我們一直在收到更好的集成請(qǐng)求。然而,當(dāng)使用開箱即用的時(shí),目前的集成有些缺乏。例如,不能輕易地推斷使用的基于對(duì)象的默認(rèn)中的類型。這也使得將現(xiàn)有代碼庫遷移到更具挑戰(zhàn)性。 Vue 2.5中即將推出的TypeScript變化 輸入提升 自Vue 2.0發(fā)布以來,我們一直在收到更好的 TypeScript 集成請(qǐng)求。 自從發(fā)布以來,我們已經(jīng)為大多數(shù)核心庫(vu...

    用戶84 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    nihao 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<