成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用于 TypeScript 枚舉的實用輔助函數

開發(fā) 前端
在 TypeScript 中使用枚舉類型時,下面這些輔助函數可能會很有用,趕緊來看一下吧!

在 TypeScript 中使用枚舉類型時,下面這些輔助函數可能會很有用,趕緊來看一下吧!

輔助函數將以下面的枚舉為例進行測試:

enum DayOfWeek {
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7,
}
type Enum = { [s: number]: string };

一 檢查枚舉是否包含某個key

該方法可以用來檢查一個枚舉中是否包含某個key,代碼如下:

function isEnumKey<T extends Enum>(enumSrc: T, key: unknown) : key is keyof T {
return Number.isInteger(enumSrc[key as keyof T]);
}

測試:

console.log(isEnumKey(DayOfWeek, DayOfWeek[DayOfWeek.Friday])); // true
console.log(isEnumKey(DayOfWeek, DayOfWeek[DayOfWeek.Monday])); // true
console.log(isEnumKey(DayOfWeek, "hello" )); // false

二 檢查枚舉是否包含某個value

該方法可以用來檢查一個枚舉中是否包含某個枚舉值,代碼如下:

function isEnumValue<T extends Enum>(enumSrc: T, value: unknown): value is T[keyof T] {
return Number.isInteger(enumSrc[enumSrc[value as keyof T] as any as keyof T]);
}

測試:

console.log(isEnumValue(DayOfWeek, DayOfWeek.Friday)); // true
console.log(isEnumValue(DayOfWeek, DayOfWeek.Monday)); // true
console.log(isEnumValue(DayOfWeek, 996)); // false

三 將枚舉轉化為key列表

該方法可以用來將枚舉轉化為key列表,也就是將所有的枚舉key存放在一個數組中,代碼如下:

function enumToKeys<T extends Enum>(enumSrc: T): (keyof T)[] {
return Object.keys(enumSrc).filter((key: keyof T | any) => isEnumKey(enumSrc, key)) as (keyof T)[];
}

測試:

console.log(enumToKeys(DayOfWeek));

輸出結果:

[
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
]

四 將枚舉轉化為value列表

該方法可以用來將枚舉中所有的枚舉值提取出來,放在一個數組中,代碼如下:

function enumToValues<T extends Enum>(enumSrc: T): T[keyof T][] {
return enumToKeys(enumSrc)
.map((key: keyof T) => enumSrc[key]);
}

測試:

console.log(enumToValues(DayOfWeek));

輸出結果:

[ 1, 2, 3, 4, 5, 6, 7 ]

五 將枚舉值轉化為對應的key

該方法可以通過枚舉值獲取枚舉中對應的key,代碼如下:

function enumValueToKey<T extends Enum>(enumSrc: T, value: T[keyof T]): keyof T | undefined {
return (enumSrc as any)[value];
}

測試:

console.log(enumValueToKey(DayOfWeek, DayOfWeek.Friday)); // Friday
console.log(enumValueToKey(DayOfWeek, DayOfWeek.Monday)); // Monday
console.log(enumValueToKey(DayOfWeek, 996)); // undefined

六 將枚舉轉換為鍵值對數組

該方法可以用來將枚舉轉化為鍵值對數組,代碼如下:

function enumToEntries<T extends Enum>(enumSrc: T): [keyof T, T[keyof T]][] {
return enumToValues(enumSrc)
.map((value: T[keyof T]) =>
[enumValueToKey(enumSrc, value) as keyof T, value]);
}

測試:

console.log(enumToEntries(DayOfWeek));

輸出結果:

[
[ 'Monday', 1 ],
[ 'Tuesday', 2 ],
[ 'Wednesday', 3 ],
[ 'Thursday', 4 ],
[ 'Friday', 5 ],
[ 'Saturday', 6 ],
[ 'Sunday', 7 ]
]

七 將枚舉轉換為對象數組

該方法可以用來將枚舉轉化為對象數組,鍵值可以自定義,代碼如下:

function fromEnum<T extends Enum, C>(
enumSrc: T,
projection: (item: [keyof T, T[keyof T]], index: number, array: [keyof T, T[keyof T]][]) => C,
skip?: (value: [keyof T, T[keyof T]], index: number, array: [keyof T, T[keyof T]][]) => boolean
) {
let entries = enumToEntries(enumSrc);
if (skip) entries = entries.filter(skip);
return entries.map(projection);
}

測試:

interface Option<T> {
label: keyof T;
value: T[keyof T];
}
const options: Option<typeof DayOfWeek>[] = fromEnum(
DayOfWeek,
([label, value]: [keyof typeof DayOfWeek, DayOfWeek]) => ({
label,
value,
})
);
console.log(options);

輸出結果:

[
{ label: 'Monday', value: 1 },
{ label: 'Tuesday', value: 2 },
{ label: 'Wednesday', value: 3 },
{ label: 'Thursday', value: 4 },
{ label: 'Friday', value: 5 },
{ label: 'Saturday', value: 6 },
{ label: 'Sunday', value: 7 }
]
責任編輯:姜華 來源: 前端充電寶
相關推薦

2023-05-16 16:03:10

2023-08-07 16:07:42

2021-08-04 08:33:59

TypeScriptConst Readonly

2021-05-21 13:36:46

iOSiPhone功能

2016-10-11 13:32:50

函數式TypeScriptJavascript

2014-01-02 16:06:03

PostgreSQL實用函數

2022-10-24 15:29:34

TypeScript開發(fā)程序類型

2023-02-28 15:20:31

TypeScript開發(fā)編程

2025-03-07 08:53:33

TypeScript普通枚舉反向映射

2016-09-30 09:43:17

JavascriptTypeScript函數式編程

2024-09-29 08:35:34

TypeScript枚舉安全性

2023-04-14 15:44:20

TypeScrip函數重載

2009-07-30 15:35:47

C#時間函數

2009-12-03 10:06:21

路由器功能介紹

2022-04-26 09:01:39

實用工具類型TypeScript

2009-12-17 16:57:29

Ruby dot

2022-01-04 19:21:04

函數TypeScript重載

2009-08-06 16:17:05

點對點消息隊列

2024-09-25 08:37:03

TypeScripessential工具類型

2025-03-17 00:33:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九99久久| 欧美精品乱码久久久久久按摩 | 欧美精品在欧美一区二区少妇 | 成人视屏在线观看 | 成人美女免费网站视频 | 亚洲成人午夜电影 | 日本亚洲精品 | 成人免费视频网站在线看 | 精品国产精品国产偷麻豆 | 成年女人免费v片 | 福利一区二区在线 | 中文字幕在线观看 | 欧美小视频在线观看 | 精品欧美 | h在线播放 | 成人一区二区电影 | 久久综合888 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产精品精品视频一区二区三区 | 欧美精品久久久久久久久久 | 国产在线一区二区三区 | 午夜综合| 99精品欧美一区二区蜜桃免费 | 亚洲精品视频在线 | 欧美aaaaa| 久久1区| 日韩一级不卡 | 成人在线观看免费观看 | 久草免费在线视频 | 97成人精品 | 91免费在线看 | 欧美精品一区二区在线观看 | 久久久久九九九女人毛片 | 国产高清在线精品一区二区三区 | 秋霞精品 | 久久精品免费看 | 亚洲国产成人精品女人久久久 | 欧美一级片在线看 | 国内自拍偷拍视频 | 日韩精品久久久久久 | 欧美日日|