通用枚举类型防护

2024-06-24

我可以编写一个非泛型类型保护来检查给定字符串是否是字符串枚举的成员,如下所示:

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(使用前将#替换为@)

通用枚举类型防护 的相关文章

随机推荐

  • 对 UIView 框架进行动画处理,子视图 UIScrollView 并不总是进行动画处理

    In this http screencast com t YvjNf5Z1xMn例子 当我对 tabBarController 进行动画处理时 为了实现全屏效果 我对 PhotoViewerViewController 的框架进行了动画处
  • 关于是否使用基于Annotation的spring boot graphql服务器的指导

    我正在使用 spring boot 和 graphql 开发一个新项目 我对如何继续感到困惑 因为有两种方法可以开发它 一种是通过 graphqls 文件和基于注释的方法 我更喜欢基于注释的方法 但它们稳定吗 例如 https github
  • gnuplot 中的填充图案

    我想知道 gnuplot 是否提供了比您在输入 test 时看到的 8 种模式更多的阴影模式 例如在 wxt 终端中 也许有超过 8 种填充图案 显然不是 如下面的代码所示 我不是在谈论与不同颜色组合的图案 我只是指图案的类型 我希望你能够
  • 匈牙利算法 - 系统分配

    我正在一个项目中实现匈牙利算法 我设法让它工作 直到所谓的步骤 4维基百科 http en wikipedia org wiki Hungarian algorithm Matrix 5Finterpretation 我确实设法让计算机创建
  • 用户 mycomputer\myloginName 没有所需的权限

    我正在尝试访问 SSRS 的报告管理器 URL 但是 我不断收到以下错误 用户 mycomputer myloginName 没有所需的权限 验证是否已授予足够的权限并且已解决 Windows 用户帐户控制 UAC 限制 我尝试以管理员身份
  • 用于控制器休息服务的 Spring Junit 测试用例

    我有一个响应 REST 调用的控制器 我有针对其他公共方法的各种测试用例 我不知道如何为我的控制器编写一个 RequestMapping value api frames method RequestMethod GET public Li
  • UNION 与 WHERE 子句

    我正在做一个UNIONOracle 数据库上的两个查询 他们俩都有一个WHERE条款 如果我这样做的话 性能会有什么不同吗 WHERE after UNION与执行查询相比UNION after WHERE clause 例如 SELECT
  • grep 以特定字符串开头的行

    我想找到文件中以特定字符串开头的所有行 问题是 我事先不知道字符串里有什么 该值存储在变量中 天真的解决方案如下 grep my string file txt 因为如果 Bash 变量my string包含任何正则表达式特殊字符 grep
  • 以编程方式从 iPhone 向 WordPress 博客发表评论

    我在本地主机服务器上安装了 WordPress 博客 还制作了一个 iPhone 应用程序来通过 rss 浏览博客 我尝试使用此代码以编程方式发布评论 define post url http localhost web wp wp com
  • 知道所有其他就绪回调何时完成

    我想要我的处理程序ready事件将在所有其他处理程序完成后触发done 它对于操纵插件的不良行为非常方便 如果我在所有其他处理程序之后编写我的处理程序 它只能保证它会在所有其他处理程序之后触发fired 没做完 function setTi
  • Animate.css - 等待动画完成后再继续

    我目前正在使用 Animate css 为我正在创建的应用程序制作动画 我正在寻找一种方法来等待动画完成后再继续 这是我认为可行的方法 但没有 任何帮助表示赞赏 myDiv addClass animated flipOutY functi
  • Angular 4 ExpressionChangedAfterItHasBeenCheckedError 错误

    在父组件中 gt ExpressionChangedAfterItHasBeenCheckedError Expression has changed after it was checked Previous value Current
  • 在字符串上使用指针

    我对字符串上指针的使用感到非常困惑 感觉他们遵守不同的规则 考虑下面的代码 char ptr apple perfectly valid here not when declaring afterwards like next ptr ap
  • pdo 准备转义单引号

    我在正在构建的 Web 应用程序中使用 PDO 我一直认为 实际上我错了 使用prepare应该有助于插入变量中的单引号 但似乎我错过了一些东西 我在插入值时遇到错误 例如L Aquila输入数据中有单引号的地方 我的实际代码是 sql I
  • 错误 MSB4006:涉及目标的目标依赖关系图中存在循环依赖关系

    我使用 VS2012 在 csproj 文件上有以下目标 我想在构建完成后在项目上运行 发布 这给了我以下错误 错误 MSB4006 涉及目标 AfterBuild 的目标依赖关系图中存在循环依赖关系
  • 如果我将 ValidateRequest 设置为 false 不是很危险吗?

    我在我的 asp net 项目的一些 Web 表单中使用 FreeTextBox HTML 编辑器 如果我不将 ValidateRequest 属性设置为 false 我会收到此错误 从客户端检测到潜在危险的 Request Form 值
  • NG2:angular2-webpack-starter - HMR 的目的是什么?

    我正在清理我的 angular2 项目 出于多种原因 我决定从种子开始 This one https github com AngularClass angular2 webpack starter 该种子使用HMR https webpa
  • 使用 AVAssetWriter 录制视频:第一帧是黑色的

    我正在录制视频 用户也可以切换到仅音频 AVAssetWriter 我在应用程序启动时开始录制 但是第一帧是黑色的 或非常暗 当我从音频切换到视频时也会发生这种情况 感觉就像是AVAssetWriter and or AVAssetWrit
  • Spring Data Rest 不明确关联异常

    新增加的LinkCollectingAssociationHandler正在扔一个MappingException由于我的域类中存在不明确的关联 链接数组如下所示
  • 通用枚举类型防护

    我可以编写一个非泛型类型保护来检查给定字符串是否是字符串枚举的成员 如下所示 enum MyEnum Thing1 thing one Thing2 thing two const isMyEnum token any token is M