記一個TS 列舉順序的坑

汜水渟發表於2024-11-20

專案中有如下列舉,其中待修改是後增的,然後在除錯中發現,【待修改】<【待傳送】,這個沒問題。

但是之前的邏輯卻是反著的,【待填寫】/【待跟進】>【待傳送】

export enum WorkflowStatus {
WaitFill = "待填寫",
WaitEdit = "待修改",
WaitFollow = "待跟進",
WaitSend = "待傳送",
Making = "製作中",
Finish = "已生成",
Deleted = "已取消",
}

這一下子給我整蒙了,第一反應看下linecommit,一年前,原來鍋不在我。

然後繼續檢視,發現官方解釋如下:enum 是一種列舉型別,它定義了一組命名的常量。雖然列舉成員本身並不直接儲存順序資訊(它們主要是鍵值對),但 TypeScript 會為它們分配一個預設的順序值,從 0 開始遞增,除非顯式指定了值。

這裡顯然是英文值替代了指定值,那麼實際排序是怎麼排的呢?

繼續查閱文件,發現直接用值比較時,是使用對應的Unicode 編碼,第一個字相同時會繼續比較第二個字。

開啟線上Unicode ,【待填寫】\u5f85\u586b\u5199,【待修改】 \u5f85\u4fee\u6539,【待跟進】 \u5f85\u8ddf\u8fdb,【待傳送】\u5f85\u53d1\u9001 所以【待填寫】/【待跟進】>【待傳送】,但是【待修改】<【待傳送】

相關文章