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

資訊專欄INFORMATION COLUMN

TypeScript 初識(shí) - 枚舉

molyzzx / 1411人閱讀

摘要:當(dāng)滿足以下條件時(shí),枚舉成員被當(dāng)作是常數(shù)不具有初始化函數(shù)并且之前的枚舉成員是常數(shù)。在這種情況下,當(dāng)前枚舉成員的值為上一個(gè)枚舉成員的值加。但第一個(gè)枚舉元素是個(gè)例外。枚舉成員使用常數(shù)枚舉表達(dá)式初始化。

數(shù)字類型枚舉

常規(guī)枚舉的值都是數(shù)字類型,因此被稱為數(shù)字類型枚舉:

enum Color {
    Red,
    Blue,
    Green
}
console.log(Color.Red);
// 0
console.log(Color[0]);
// Red
console.log(Color[Color.Red]);
// Red, Color.Red = 0
改變與數(shù)字枚舉關(guān)聯(lián)的數(shù)字

默認(rèn)情況下,第一個(gè)枚舉值是 0,后續(xù)的值會(huì)遞增。

可以通過(guò)賦值的方法修改枚舉關(guān)聯(lián)的數(shù)字,后續(xù)的值會(huì)遞增,但不會(huì)修改之前的值:

enum Color {
    Red, // 0
    Blue = 2, // 2
    Green // 3
}

手動(dòng)賦值后,出現(xiàn)前面的值被后面的值覆蓋了,但是 TypeScript 不會(huì)進(jìn)行報(bào)錯(cuò):

enum Color {
    Red = 1, // 1
    Blue = 0, // 0
    Green // 1
}
console.log(Color["Red"] === 1); // true
console.log(Color["Green"] === 1); // true
console.log(Color[1] === "Red"); // false
console.log(Color[1] === "Green"); // true
字符串枚舉

枚舉的值還可以設(shè)置為字符串,當(dāng)其中一個(gè)值賦值為字符串后,后續(xù)的值必須要賦值:

enum Color {
    Red, // 0
    Blue = "Blue", // Blue
    Green = "Green" // Green
}
常量枚舉

常量枚舉可以提升些許的性能,在枚舉值不會(huì)變化的情況下,最好都使用 const 進(jìn)行聲明:

const enum Color {
    Red,
    Blue,
    Green
}
const red = Color.Red;
// 編譯成 const red = 0 /* Red */;

常量枚舉與普通枚舉的區(qū)別是,它會(huì)在編譯階段被刪除,并且不能包含計(jì)算成員。

const enum Color {
    Red,
    Blue,
    Green
}
const red = Color.Red;
// 編譯成
// var Color;
// (function (Color) {
//     Color[Color["Red"] = 0] = "Red";
//     Color[Color["Blue"] = 1] = "Blue";
//     Color[Color["Green"] = 2] = "Green";
// })(Color || (Color = {}));
// const red = Color.Red;
計(jì)算所得項(xiàng)

枚舉項(xiàng)有兩種類型:常數(shù)項(xiàng)(constant member)和計(jì)算所得項(xiàng)(computed member)。

前面的例子使用的都是常數(shù)項(xiàng),計(jì)算所得項(xiàng)其實(shí)就是通過(guò)計(jì)算才會(huì)得到最后的項(xiàng):

enum Color {
    Red,
    Green,
    Blue = "blue".length
}

計(jì)算所得項(xiàng)后面的值都需要進(jìn)行手動(dòng)賦值,否則會(huì)因?yàn)闊o(wú)法獲得初始值而報(bào)錯(cuò)。

當(dāng)滿足以下條件時(shí),枚舉成員被當(dāng)作是常數(shù):

不具有初始化函數(shù)并且之前的枚舉成員是常數(shù)。在這種情況下,當(dāng)前枚舉成員的值為上一個(gè)枚舉成員的值加 1。但第一個(gè)枚舉元素是個(gè)例外。如果它沒有初始化方法,那么它的初始值為 0。

枚舉成員使用常數(shù)枚舉表達(dá)式初始化。常數(shù)枚舉表達(dá)式是 TypeScript 表達(dá)式的子集,它可以在編譯階段求值。當(dāng)一個(gè)表達(dá)式滿足下面條件之一時(shí),它就是一個(gè)常數(shù)枚舉表達(dá)式:

數(shù)字字面量

引用之前定義的常數(shù)枚舉成員(可以是在不同的枚舉類型中定義的)如果這個(gè)成員是在同一個(gè)枚舉類型中定義的,可以使用非限定名來(lái)引用
帶括號(hào)的常數(shù)枚舉表達(dá)式

+, -, ~ 一元運(yùn)算符應(yīng)用于常數(shù)枚舉表達(dá)式

+, -, *, /, %, <<, >>, >>>, &, |, ^ 二元運(yùn)算符,常數(shù)枚舉表達(dá)式做為其一個(gè)操作對(duì)象。若常數(shù)枚舉表達(dá)式求值后為 NaN 或 Infinity,則會(huì)在編譯階段報(bào)錯(cuò)

所有其它情況的枚舉成員被當(dāng)作是需要計(jì)算得出的值。

外部枚舉

外部枚舉是使用 declare enum 定義的枚舉類型:

declare enum Directions {
    Up,
    Down,
    Left,
    Right
}
const directions = [
    Directions.Up,
    Directions.Down,
    Directions.Left,
    Directions.Right
];

// 編譯結(jié)果
const directions = [
    Directions.Up,
    Directions.Down,
    Directions.Left,
    Directions.Right
];

declare 定義的類型只會(huì)用于編譯時(shí)的檢查,編譯結(jié)果中會(huì)被刪除。

外部枚舉和聲明語(yǔ)句一樣,常出現(xiàn)在聲明文件中。同時(shí)使用 declareconst 是可以的:

declare const enum Directions {
    Up,
    Down,
    Left,
    Right
}

let directions = [
    Directions.Up,
    Directions.Down,
    Directions.Left,
    Directions.Right
];

// 編譯結(jié)果
let directions = [0 /* Up */, 1 /* Down */, 2 /* Left */, 3 /* Right */];

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

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

相關(guān)文章

  • TypeScript 初識(shí) - 變量

    摘要:通常會(huì)定義為函數(shù)的返回值一個(gè)類型的變量是沒有生命用處的,因?yàn)轭愋偷淖兞恐荒苜x值為。和有一些區(qū)別的,函數(shù)沒有返回值時(shí)返回類型為的方法,即使沒有寫明語(yǔ)句,也會(huì)在函數(shù)執(zhí)行完的時(shí)候,隱式地返回一個(gè)類型。中新增加的變量聲明方式。 類型注解 類型注解使用 :TypeAnnotation 語(yǔ)法。類型聲明空間中可用的任何內(nèi)容都可以用作類型注解。 const num: number = 123; fun...

    dinfer 評(píng)論0 收藏0
  • TypeScript 初識(shí)

    摘要:當(dāng)你陷在一個(gè)中大型項(xiàng)目中時(shí)應(yīng)用日趨成為常態(tài),沒有類型約束類型推斷,總有種牽一發(fā)而動(dòng)全身的危機(jī)和束縛。總體而言,這些付出相對(duì)于代碼的健壯性和可維護(hù)性,都是值得的。目前主流的都為的開發(fā)提供了良好的支持,比如和。參考資料中文文檔 文章博客地址:http://pinggod.com/2016/Typescript/ TypeScript 是 JavaScript 的超集,為 JavaScrip...

    iliyaku 評(píng)論0 收藏0
  • TypeScript 初識(shí) - 內(nèi)置對(duì)象

    摘要:自帶的內(nèi)置對(duì)象都可以直接在中當(dāng)作定義好的類型。的內(nèi)置對(duì)象標(biāo)準(zhǔn)提供了常用的內(nèi)置對(duì)象等。在不需要額外引入就可以直接使用這些內(nèi)置對(duì)象用寫不是內(nèi)置對(duì)象的一部分,想要寫時(shí)提示,需要引入第三方聲明文件 JavaScript 自帶的內(nèi)置對(duì)象都可以直接在 TypeScript 中當(dāng)作定義好的類型。 TypeScript 核心庫(kù)的定義文件 TypeScript 核心庫(kù)的定義文件定義了所有瀏覽器環(huán)境需要用...

    lordharrd 評(píng)論0 收藏0
  • TypeScript 初識(shí) - 基礎(chǔ)

    摘要:安裝通過(guò)命令進(jìn)行安裝創(chuàng)建文件文件名以擴(kuò)展名結(jié)尾編譯通過(guò)命令行進(jìn)行編譯通過(guò)運(yùn)行任務(wù)的方式進(jìn)行編譯下使用顯示運(yùn)行任務(wù),選擇構(gòu)建進(jìn)行編譯。 安裝 通過(guò) npm 命令進(jìn)行安裝: $ npm i -g typescript 創(chuàng)建 ts 文件 Typescript 文件名以 ts 擴(kuò)展名結(jié)尾: function hello(value: string) { console.log(`hel...

    CODING 評(píng)論0 收藏0
  • TypeScript 初識(shí) - 函數(shù)

    摘要:函數(shù)類型函數(shù)返回值類型我們可以給每個(gè)參數(shù)添加類型之后再為函數(shù)本身添加返回值類型。能夠根據(jù)返回語(yǔ)句自動(dòng)推斷出返回值類型,所以通常可以省略它匿名函數(shù)完整函數(shù)類型完整的函數(shù)類型包含兩部分參數(shù)類型和返回值類型。 函數(shù)是 JavaScript 的第一等公民,函數(shù)在 JavaScript 中可以實(shí)現(xiàn)抽象層、模擬類、信息隱藏和模塊等等。TypeScript 在一定基礎(chǔ)上擴(kuò)展了函數(shù)的功能。 函數(shù)類型 ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<