typescript - 打字稿:如何检查一个值是否是有效的枚举键值?
问题描述
有没有办法在打字稿中获取枚举的名称,比如nameof(FirstEnum)
?以下代码有一个丑陋的 if 开关,每次定义新枚举时都必须扩展它。在打字稿中是否有更通用的方法来实现相同的目标?
enum FirstEnum {
First = 0,
Second = 1,
Third = 2,
}
enum SecondEnum {
One,
Two,
}
function translateEnum(type$, val): string {
let lookupKey = '';
if (type$ === FirstEnum) {
lookupKey = `firstenum.${FirstEnum[val]}`;
} else if (type$ === SecondEnum) {
lookupKey = `secondenum.${SecondEnum[val]}`;
} else {
throw new Error('not supported');
}
//lookupkey example: secondenum.One
const result = ''; //translate here, ex. await translationService.translate(lookupkey);
return result;
}
translateEnum(SecondEnum , SecondEnum.One);
解决方案
由于 TypescriptEnums
被转换为 JavaScript 对象,因此您可以检查enum
键值是否是enums
usingin
运算符的成员。请注意,这仅适用于enums
不是const
基于数字的情况。
enum FirstEnum {
First = 0,
Second = 1,
Third = 2,
}
enum SecondEnum {
One,
Two,
}
function translateEnum(val: FirstEnum | SecondEnum): string {
let lookupKey = '';
if (val in FirstEnum || val in SecondEnum) {
console.log(`Enum value ${val} is valid!`);
//lookupkey example: secondenum.One
const result = ''; //translate here, ex. await translationService.translate(lookupkey);
return result;
} else {
console.log(`Enum value ${val} not supported.`);
throw new Error('not supported');
}
}
translateEnum(SecondEnum.One);
translateEnum(10);
输出
Enum value 0 is valid!
Enum value 10 not supported.
Uncaught Error: not supported
at translateEnum (eval at <anonymous> (main-0.js:804), <anonymous>:23:15)
at eval (eval at <anonymous> (main-0.js:804), <anonymous>:27:1)
at main-0.js:804
更多信息
推荐阅读
- python - 自动将 csv 转储到新的 Postgres 表中
- javascript - 从 Node.js 服务器读取数据时 PHP file_get_contents 命令不起作用
- swift - 使用 Storyboard 和自定义视图控制器初始化
- java - 使用 JUnit 和 AssertJ 测试数组是否包含元素
- node.js - 使用 exceljs 和 nodejs 下载的 xlsx 文件正在 libreOffice 中打开,但在 excel 2007 中显示损坏
- kubernetes - 在 Kubernetes 上运行的 Spring Boot 应用程序上为 Kafka Streams 远程交互式查询动态配置 application.server 参数的想法
- r - 按 id 从宽到长收集列
- c++ - 本地网络运行的客户端服务器架构
- ios - 使用扩展正确归档 iOS 应用程序
- excel - 改进从电子表格中获取电子邮件地址的过程