日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript入门-枚举

發布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TypeScript入门-枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

枚舉(Enum)類型用于取值被限定在一定范圍內的場景,比如一周只能有七天,顏色限定為紅綠藍等。

簡單的例子


枚舉使用 enum 關鍵字來定義:

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};

枚舉成員會被賦值為從 0 開始遞增的數字,同時也會對枚舉值到枚舉名進行反向映射:

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};console.log(Days["Sun"] === 0); // true console.log(Days["Mon"] === 1); // true console.log(Days["Tue"] === 2); // true console.log(Days["Sat"] === 6); // trueconsole.log(Days[0] === "Sun"); // true console.log(Days[1] === "Mon"); // true console.log(Days[2] === "Tue"); // true console.log(Days[6] === "Sat"); // true

手動賦值

enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat};console.log(Days["Sun"] === 7); // true console.log(Days["Mon"] === 1); // true console.log(Days["Tue"] === 2); // true console.log(Days["Sat"] === 6); // true

上面的例子中,未手動賦值的枚舉項會接著上一個枚舉項遞增。


如果未手動賦值的枚舉項與手動賦值的重復了,TypeScript 是不會察覺到這一點的

enum Days {Sun = 3, Mon = 1, Tue, Wed, Thu, Fri, Sat};console.log(Days["Sun"] === 3); // true console.log(Days["Wed"] === 3); // true console.log(Days[3] === "Sun"); // false console.log(Days[3] === "Wed"); // true

上面的例子中,遞增到 3 的時候與前面的 Sun 的取值重復了,但是 TypeScript 并沒有報錯,導致 Days[3] 的值先是 “Sun”,而后又被 “Wed” 覆蓋了。所以使用的時候需要注意,最好不要出現這種覆蓋的情況。


手動賦值的枚舉項可以不是數字,此時需要使用類型斷言來讓 tsc 無視類型檢查 (編譯出的 js 仍然是可用的):

enum Days {Sun = 7, Mon, Tue, Wed, Thu, Fri, Sat = <any>"S"};

當然,手動賦值的枚舉項也可以為小數或負數,此時后續未手動賦值的項的遞增步長仍為 1:

enum Days {Sun = 7, Mon = 1.5, Tue, Wed, Thu, Fri, Sat};console.log(Days["Sun"] === 7); // true console.log(Days["Mon"] === 1.5); // true console.log(Days["Tue"] === 2.5); // true console.log(Days["Sat"] === 6.5); // true

常數項和計算所得項

枚舉項有兩種類型:常數項(constant member)和計算所得項(computed member)。
前面我們所舉的例子都是常數項,一個典型的計算所得項的例子:

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

上面的例子中,“blue”.length 就是一個計算所得項。

上面的例子不會報錯,但是如果緊接在計算所得項后面的是未手動賦值的項,那么它就會因為無法獲得初始值而報錯

enum Color {Red = "red".length, Green, Blue};// index.ts(1,33): error TS1061: Enum member must have initializer. // index.ts(1,40): error TS1061: Enum member must have initializer.

當滿足以下條件時,枚舉成員被當作是常數:

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

  • 枚舉成員使用常數枚舉表達式初始化。常數枚舉表達式是 TypeScript 表達式的子集,它可以在編譯階段求值。當一個表達式滿足下面條件之一時,它就是一個常數枚舉表達式:

  • 數字字面量

  • 引用之前定義的常數枚舉成員(可以是在不同的枚舉類型中定義的)如果這個成員是在同一個枚舉類型中定義的,可以使用非限定名來引用

  • 帶括號的常數枚舉表達式

  • +, -, ~ 一元運算符應用于常數枚舉表達式

  • +, -, *, /, %, <<, >>, >>>, &, |, ^ 二元運算符,常數枚舉表達式做為其一個操作對象。若常數枚舉表達式求值后為 NaN 或 Infinity,則會在編譯階段報錯,所有其它情況的枚舉成員被當作是需要計算得出的值。


常數枚舉

常數枚舉是使用 const enum 定義的枚舉類型:

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

常數枚舉與普通枚舉的區別是,它會在編譯階段被刪除,并且不能包含計算成員,假如包含了計算成員,則會在編譯階段報錯


外部枚舉

外部枚舉(Ambient Enums)是使用 declare enum 定義的枚舉類型:

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

外部枚舉與聲明語句一樣,常出現在聲明文件中

同時使用 declare 和 const 也是可以的:

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

總結

以上是生活随笔為你收集整理的TypeScript入门-枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。