我可以编写一个非泛型类型防护,以检查给定的字符串是否是这样的字符串枚举的成员:
enum MyEnum {
Thing1 = 'thing one',
Thing2 = 'thing two',
}
const isMyEnum = (token: any): token is MyEnum => {
return Object.values(MyEnum).includes(token as MyEnum);
};
是否有可能使它通用,以便我可以对许多不同的字符串枚举重新使用相同的检查逻辑?
你的意思是这样吗?
const isSomeEnum = <T>(e: T) => (token: any): token is T[keyof T] =>
Object.values(e).includes(token as T[keyof T]);
因此,isSomeEnum
从枚举对象生成类型保护功能。类型T[keyof T]
表示的属性值T
的类型。
const isMyEnum = isSomeEnum(MyEnum);
// const isMyEnum: (token: any) => token is MyEnum
调用时isSomeEnum(MyEnum)
,类型T
推断为typeof MyEnum
,然后T[keyof T]
是该属性的属性值MyEnum
。
希望能有所帮助。祝好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句