如何判断字符串是否为TypeScript枚举的有效字符串表示?
判断TypeScript枚举的有效字符串表示
针对你定义的这个数字枚举:
enum Items { One = 1, Two, }
要判断字符串s是不是它的有效字符串表示(即是否是枚举的原始键名,比如'One'有效,'1'无效),可以这么做:
核心思路
TypeScript数字枚举编译后会生成双向映射的对象——既包含键→值的映射,也包含值→键的反向映射(比如Items[1] = 'One')。所以我们需要先过滤掉对象中那些数字形式的键,只保留原始的字符串键,再判断目标字符串是否在其中。
具体实现
1. 针对特定枚举的判断函数
enum Items { One = 1, Two, } // 提取枚举的所有原始字符串键 const validItemKeys = Object.keys(Items).filter(key => isNaN(Number(key))); function isValidItemString(s: string): boolean { return validItemKeys.includes(s); } // 测试示例 console.log(isValidItemString('One')); // true console.log(isValidItemString('Two')); // true console.log(isValidItemString('1')); // false console.log(isValidItemString('Three'));// false
2. 通用枚举判断函数(适用于任何枚举)
如果需要复用逻辑,可以写一个通用函数:
function isValidEnumKey<T extends object>(enumObj: T, str: string): boolean { // 过滤掉数字键,只保留原始字符串键 const enumKeys = Object.keys(enumObj).filter(key => isNaN(Number(key))); return enumKeys.includes(str); } // 使用示例 console.log(isValidEnumKey(Items, 'One')); // true console.log(isValidEnumKey(Items, '1')); // false
这样就能精准判断目标字符串是否是枚举的有效原始字符串键,排除反向映射产生的数字字符串键。
内容的提问来源于stack exchange,提问作者eouw0o83hf
相关产品推荐
相关产品推荐

