通用枚举类型防护

凝灰岩

我可以编写一个非泛型类型防护,以检查给定的字符串是否是这样的字符串枚举的成员:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

枚举方法的通用返回类型

来自分类Dev

通用类枚举返回类型

来自分类Dev

枚举方法的通用返回类型

来自分类Dev

类型防护不适用于通用参数吗?

来自分类Dev

比较通用枚举和关联的类型

来自分类Dev

如何使用通用枚举类型调用GetEnumName?

来自分类Dev

通用映射函数处理枚举类型

来自分类Dev

通过快速枚举约束通用类型

来自分类Dev

枚举作为打字稿中的通用类型

来自分类Dev

在枚举类型上调用通用方法

来自分类Dev

Rust将枚举返回为通用类型

来自分类Dev

通用枚举类型扩展方法的随机枚举值

来自分类Dev

具有通用枚举和通用协议的Swift类型擦除

来自分类Dev

确定类型是否为枚举类型的通用列表

来自分类Dev

验证通用对象属性的类型防护不是可选的/空的/未定义的

来自分类Dev

动态类型防护功能

来自分类Dev

通用枚举

来自分类Dev

如何将自己的枚举类型转换为通用枚举类型?

来自分类Dev

创建一个通用类型的枚举集

来自分类Dev

枚举Haskell的总和和乘积类型的通用算法?

来自分类Dev

使用具有通用关联类型的枚举的Swift协议

来自分类Dev

枚举Haskell的总和和乘积类型的通用算法?

来自分类Dev

使用通用枚举类型扩展抽象类

来自分类Dev

如何在.NET Standard中为通用枚举类型设置枚举标志?

来自分类Dev

如何在.NET Standard中为通用枚举类型设置枚举标志?

来自分类Dev

接受“通用”枚举作为参数,然后在运行时转换为 diff 枚举类型的方法

来自分类Dev

对多种类型使用防护

来自分类Dev

TypeScript中函数的类型防护

来自分类Dev

当用作通用类型时,可为空的枚举类型不能分配为null

Related 相关文章

热门标签

归档