![](/img/trans.png)
[英]Typescript: How to use key type as enum in an object keep all enum values as optional?
[英]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.