用于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(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(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(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(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(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(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(
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 {
label: keyof T;
value: T[keyof T];
}
const options: Option[] = 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 }
]

当前名称:用于TypeScript枚举的实用辅助函数
文章来源:http://www.csdahua.cn/qtweb/news8/220058.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网