摘要:當(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í)使用 declare 和 const 是可以的:
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
摘要:通常會(huì)定義為函數(shù)的返回值一個(gè)類型的變量是沒有生命用處的,因?yàn)轭愋偷淖兞恐荒苜x值為。和有一些區(qū)別的,函數(shù)沒有返回值時(shí)返回類型為的方法,即使沒有寫明語(yǔ)句,也會(huì)在函數(shù)執(zhí)行完的時(shí)候,隱式地返回一個(gè)類型。中新增加的變量聲明方式。 類型注解 類型注解使用 :TypeAnnotation 語(yǔ)法。類型聲明空間中可用的任何內(nèi)容都可以用作類型注解。 const num: number = 123; fun...
摘要:當(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...
摘要:自帶的內(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)境需要用...
摘要:安裝通過(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...
摘要:函數(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ù)類型 ...
閱讀 1991·2021-10-25 09:48
閱讀 2842·2021-09-22 14:59
閱讀 1779·2019-08-29 16:52
閱讀 887·2019-08-29 16:07
閱讀 2328·2019-08-29 12:38
閱讀 1803·2019-08-26 13:23
閱讀 907·2019-08-26 11:49
閱讀 3303·2019-08-26 10:56