TypeScript 的 enum 是一種錯誤嗎?

時間 2021-05-29 23:39:47

1樓:胖虎

反正我不用, 我一般使用 union literalenum A {

a,b,

cfunction foo (x: A)

foo(100) //

2樓:周陸軍

一天,某人問我,聯合列舉型別是啥玩意?在我腦海裡,聯合就是聯合,列舉就是列舉。

列舉型別(enumerated type)是一種代表整數常量的資料型別。通過關鍵字enum,可以建立乙個新「型別」並指定它的值。enum typeName;

在Python裡面,如果要列舉類中的Value只能是整型數字,那麼,可以匯入IntEnum,然後繼承IntEnum即可

from enum import IntEnum //注意,此時,如果value為字串的數字,也不會報錯

如果要列舉類中的key也不能相同,那麼在匯入Enum的同時,需要匯入unique函式

from enum import Enum, unique

TypeScript 列舉,如何限定是值的型別?

TypeScript聯合型別與字面量型別 (Literal Type) 在傳統語言裡,有如何理解?

然後,再來對比下C#與TS Discriminated union type,……

然後感覺,比學微控制器更有味道,真香!學得動……

3樓:馬卍

我個人比較喜歡用字面量聯合型別代替列舉型別,看著也很直觀,不應該使用數字作為列舉的值,因為在執行時看到一堆數字也不知道是什麼意思,列舉型別更是沒有存在的必要啊,列舉型別完全是從其他程式語言移植過來的

type COLOR="red"|"green"|"yellow"

4樓:深秋的黎明-禁言

樓主有沒有用過C#?用了這麼多年還頭1次聽說enum是個錯,我覺得錯就錯在TypeScript的編譯器沒有限定enum和number之間不能隱式自動轉換。

5樓:Drake Xiang

為啥會有這種想法?enum在我看來最大的用處乙個是防止typo,比如一些只在前端用的邏輯型別。另乙個是增加可讀性,比如一些魔法數字,什麼tab的index這種。都是非常實用的功能啊

6樓:Tianfan

個人覺得,

不應該預設用數字作為值。

導致直接的預設用法一堆魔法數字。

而且中途新增,數字還會變化。

用特定的字串,把 key 作為值,或者通過 key 生成特殊的符號型別或者其他。

不過既然這樣設計了,好壞都要接受,並且喊一句,very delicious. 。

7樓:

enum當然不是一種錯誤了,不推薦使用或者雞肋反而是大錯特錯了,enum在定義型別是特別有必要的。

比如你有三種尺寸,大,中,小,你一開始就用'大','中','小'的字串去設定這個尺寸,這個時候另乙個程式設計師和你對接發現這裡的大中小不夠語義化,因為指向不明,準備改成'尺寸大','尺寸中','尺寸小',但發現各個檔案中都存在'大','中','小',想全域性替換但是有些地方'大','中','小'又不是指尺寸,是指分店規模大小,然後這個程式設計師就大吼一聲'之前程式設計師寫的什麼狗屎'遂猝。

但是你使用列舉在某個地方定義後,通過修改列舉值為'尺寸大','尺寸中','尺寸小'不就是小菜一碟麼。以前js只能用物件代替列舉,現在ts有enum更語義化的識別符號來專款專用難道不是更好麼?

8樓:ally

如果是 string enum 的話,我覺得 Literal string union type 是更好的選擇,但如果是 number enum 的話, 用 Literal union 就像用一堆 magic number, 不知道是什麼意思,比如 TypeScript 裡面的 SyntaxKind:

enum

SyntaxKind

如果用 Literal union 的話

type

SyntaxKind=0

|1|2

...;

// 不知道代表什麼

當然也可以先定義 type Unknown = 0; 但是這樣就會顯得十分囉嗦。

還有乙個使用 enum 的好處是如果需要修改某乙個 candidate 的值,enum 的話只需要改一遍,而 Literal union 的話需要修改每乙個值出現的地方。

再補充一點,嘻嘻,在 TypeScript 裡面有一種常用的模式

const

enum

NodeFlags

// 判斷是否是 BlockScoped

function

isBlockScoped

(node: Node):

boolean

想一下上面的例子用 Literal union 不能使用位運算,只能先算出結果,對於大的運算就不大好辦,而且有執行時訪問,那用 type alias 就更不可能了。

現在 TypeScript 的生態如何?

aemoe 因為每增加乙個編譯器都是一次build時間增加而且typescript還不和js一樣 Js可以向下相容會ES6的ES7的寫這些不會的繼續ES4,ES5 所以不會有太大問題而且用的這些新的功能是早晚會被瀏覽器支援的所以用起來很放心所以除非TypeScript受到瀏覽器的支援之前我都不建議在...

angular 和 typescript 到底是否適合最佳實踐?

我看angular已經快在國內吹了一年半了,然而熱度越來降的越低,這問題更是幾乎連看的人都沒有了,如果還真有認真關注這個問題想找個學習方向的,建議仔細用腦想一下原因與學習方向。 APICloud 幾年過去了,Angular已由當初的AngularJs發展為Angular。AngularJs 強調MV...

Typescript高階型別Record

白完 追星的前提是過好自己的生活!追星的前提是過好自己的生活!追星的前提是過好自己的生活!如果題主是第一次考六級的話,絕大部分人都是建議去考試噠。但是題主刷分的話選老林也是闊以噠。 群群群 看情況,要是我在這之前一直好好準備了,那我就去考,畢竟四六級能考的次數也就那麼多。喜歡JJ這麼多年,估計他也不...