簡體   English   中英

Typescript Map 所有枚舉值作為鍵

[英]Typescript Map all enum values as key

我聲明了一個 map,這樣我就可以將數字枚舉值轉換為 API 期望的值。

export const StatusMap: ReadonlyMap<Status, string> = new Map([
    [Status.NEW, 'new'],
    [Status.PENDING, 'pending'],
]);

但是當我執行statusMap.get(Status.NEW)時,它總是告訴我返回值可能未定義。 有沒有辦法強制 map(或類似的)包含所有枚舉值?

是的,我知道你在技術上可以做到

export enum Status {
    NEW = 'new',
    PENDING = 'pending',
}

但老實說,這種破壞了枚舉的意義(IMO)。

如果您可以使用常規 object 而不是Map ,則可以將其定義為枚舉成員的記錄

const statusMap: Record<Status, string> = {
    [Status.NEW]: 'new',
    [Status.PENDING]: 'pending',
};

操場


另一種選擇是使用類型斷言來保證所有枚舉成員都在 map 中:

type StatusMap = { get<T extends Status>(status: T): string }

const statusMap = new Map([
    [Status.NEW, 'new'],
    [Status.PENDING, 'pending'],
]) as StatusMap;

** 注意,使用這種方法不能保證所有枚舉成員在運行時都在 map 中,因此如果您選擇這種方式 go - 最好通過單元測試覆蓋它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM