typescript - 通用枚举类型防护

标签 typescript

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

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/

相关文章:

javascript - 无法调用其类型缺少调用签名的表达式。输入 'typeof ""' 没有兼容的调用签名 React TypeScript

html - Angular 4 - 上传 CSV

javascript - axios 的 DefinelyTyped 问题

typescript - Date.prototype.toLocaleDateString() 中的选项类型错误

angular - TypeError : this. router.events.filter is not a function error whichi uploading angular app to Aws s3 bucket

javascript - 转换字符串(url 样式)以在对象中导航

node.js - 如何在发布 NPM 模块时管理外部 .d.ts 依赖项?

javascript - Sequelize 使用 [Op.or] 查询父模型和包含的模型

javascript - 导入/导出模块 - Typescript

javascript - Typescript 渲染注释或文本