我可以编写一个非泛型类型保护来检查给定字符串是否是字符串枚举的成员,如下所示:
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]);
SoisSomeEnum
从枚举对象生成类型保护函数。方式T[keyof T]
意味着的属性值类型T https://stackoverflow.com/a/49286056/2887218.
const isMyEnum = isSomeEnum(MyEnum);
// const isMyEnum: (token: any) => token is MyEnum
你打电话时isSomeEnum(MyEnum)
, 方式T
被推断为typeof MyEnum
, 进而T[keyof T]
是其属性值,即MyEnum
.
希望有帮助。祝你好运!
链接到代码 https://www.typescriptlang.org/play/#code/JYOwLgpgTgZghgYwgAgPICMBWEFgMID2IAzmFAK64FTIDeAsAFDIvIBucANuRMQDwAVAHwAKAB4AuZAICUUgIJQocAJ6CA2gGsIKgjGkBdIQG4mAXyahIsRCkXK1wuk1bJQCbgBNe4qbKnoBAScEHAgpowWjEwQIOQAtsgAsioAonGJDMysAgAWoADmAIzIALzIAORg+SAFyEQQFQA0Ljk1BQBMZZXVhchgAO4EzeZMTAhEpG7EAMoE8RDpCd2CohB+MmVCyCJgBNogUmEqcv37sdPSWjp6hlutLBjYuAB0HNw+EDIv7l4+ewdkHBiFdtLp9AIDDIIuNJmBpiklolysBZvNFhkRIiMtCmAB6PHICYkeGo7EJKS7c6HIEgE5bM6A1HJNIZJhAA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)