在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 枚舉
初始化項(xiàng)目結(jié)構(gòu)
聯(lián)合類型
介紹
介紹
介紹
編譯選項(xiàng)
TypeScript 1.6
介紹
介紹
發(fā)展路線圖
介紹
在MSBuild里使用編譯選項(xiàng)
可迭代性
TypeScript 1.3
介紹
介紹
TypeScript 1.1
變量聲明
即將到來(lái)的Angular 2框架是使用TypeScript開(kāi)發(fā)的。 因此Angular和TypeScript一起使用非常簡(jiǎn)單方便
tsconfig.json
介紹
介紹
介紹
在MSBuild里使用編譯選項(xiàng)
使用TypeScript的每日構(gòu)建版本
新建工程
枚舉
三斜線指令
結(jié)合ASP.NET v5使用TypeScript
TypeScript里的this
介紹
TypeScript 1.4
編碼規(guī)范
介紹
模塊解析
ASP.NET 4
架構(gòu)概述
介紹
介紹
ASP.NET Core
TypeScript 1.8
介紹
介紹
創(chuàng)建簡(jiǎn)單工程
TypeScript 1.7
TypeScript 1.5
NPM包的類型
支持TypeScript的編輯器

枚舉

使用枚舉我們可以定義一些有名字的數(shù)字常量。 枚舉通過(guò)enum關(guān)鍵字來(lái)定義。

enum Direction {
    Up = 1,
    Down,
    Left,
    Right
}

一個(gè)枚舉類型可以包含零個(gè)或多個(gè)枚舉成員。 枚舉成員具有一個(gè)數(shù)字值,它可以是常數(shù)或是計(jì)算得出的值 當(dāng)滿足如下條件時(shí),枚舉成員被當(dāng)作是常數(shù):

  • 不具有初始化函數(shù)并且之前的枚舉成員是常數(shù)。 在這種情況下,當(dāng)前枚舉成員的值為上一個(gè)枚舉成員的值加1。 但第一個(gè)枚舉元素是個(gè)例外。 如果它沒(méi)有初始化方法,那么它的初始值為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á)式求值后為NaNInfinity,則會(huì)在編譯階段報(bào)錯(cuò)。

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

enum FileAccess {
    // constant members
    None,
    Read    = 1 << 1,
    Write   = 1 << 2,
    ReadWrite  = Read | Write
    // computed member
    G = "123".length
}

枚舉是在運(yùn)行時(shí)真正存在的一個(gè)對(duì)象。 其中一個(gè)原因是因?yàn)檫@樣可以從枚舉值到枚舉名進(jìn)行反向映射。

enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[Enum.A]; // "A"

編譯成:

var Enum;
(function (Enum) {
    Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));
var a = Enum.A;
var nameOfA = Enum[Enum.A]; // "A"

生成的代碼中,枚舉類型被編譯成一個(gè)對(duì)象,它包含雙向映射(name -> value)和(value -> name)。 引用枚舉成員總會(huì)生成一次屬性訪問(wèn)并且永遠(yuǎn)不會(huì)內(nèi)聯(lián)。 在大多數(shù)情況下這是很好的并且正確的解決方案。 然而有時(shí)候需求卻比較嚴(yán)格。 當(dāng)訪問(wèn)枚舉值時(shí),為了避免生成多余的代碼和間接引用,可以使用常數(shù)枚舉。 常數(shù)枚舉是在enum關(guān)鍵字前使用const修飾符。

const enum Enum {
    A = 1,
    B = A * 2
}

常數(shù)枚舉只能使用常數(shù)枚舉表達(dá)式并且不同于常規(guī)的枚舉的是它們?cè)诰幾g階段會(huì)被刪除。 常數(shù)枚舉成員在使用的地方被內(nèi)聯(lián)進(jìn)來(lái)。 這是因?yàn)槌?shù)枚舉不可能有計(jì)算成員。

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

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

生成后的代碼為:

var directions = [0 /* Up */, 1 /* Down */, 2 /* Left */, 3 /* Right */];

外部枚舉

外部枚舉用來(lái)描述已經(jīng)存在的枚舉類型的形狀。

declare enum Enum {
    A = 1,
    B,
    C = 2
}

外部枚舉和非外部枚舉之間有一個(gè)重要的區(qū)別,在正常的枚舉里,沒(méi)有初始化方法的成員被當(dāng)成常數(shù)成員。 對(duì)于非常數(shù)的外部枚舉而言,沒(méi)有初始化方法時(shí)被當(dāng)做需要經(jīng)過(guò)計(jì)算的。