我可以编写一个非泛型类型防护,以检查给定的字符串是否是这样的字符串枚举的成员:
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]
类型表示types of the property values of T
。const isMyEnum = isSomeEnum(MyEnum);
// const isMyEnum: (token: any) => token is MyEnum
当您调用
isSomeEnum(MyEnum)
时,类型T
被推断为typeof MyEnum
,然后T[keyof T]
是该属性的属性值,即MyEnum
。希望能有所帮助。祝你好运!
Link to code
关于typescript - 通用枚举类型防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278652/