typescript 中是如何遍历枚举的?
问题描述:
代码如下
export enum Icons { ADD, API, APPS, ARTICLE } for (var icon in Icons) { console.log(icon); }
我现在用的是 for in, 但是结果不是很符合需求, 前面会输出索引
如果不输出索引, 只要获取 ADD
, API
, APPS
, ARTICLE
这四个值, 有没有其他的遍历方式?
第 1 个答案:
指定下每个枚举值对应的value
,就不会生成索引的key了
export enum Icons { ADD = 'ADD', API = 'API', APPS = 'APPS', ARTICLE = 'ARTICLE' } for (var icon in Icons) { console.log(icon); }
但是这样就很麻烦,所以我很不喜欢用枚举,我更喜欢直接用union type来枚举所有情况:
type Icons = 'ADD' | 'API' | 'APPS' | 'ARTICLE'
第 2 个答案:
枚举在TS中不是一种纯类型,它混入了运行时,编译后是这样:
var Icons; (function (Icons) { Icons[Icons["ADD"] = 0] = "ADD"; Icons[Icons["API"] = 1] = "API"; Icons[Icons["APPS"] = 2] = "APPS"; Icons[Icons["ARTICLE"] = 3] = "ARTICLE"; })(Icons || (Icons = {}));
从类型的角度来说for (var icon in Icons)
这段代码应该报错,因为Icons是类型定义,不应该被使用在运行时代码逻辑里,但由于TS设计的特殊性,所以这样是可以的,但是TS也是可以通过const
将枚举声明成纯类型定义即:
export const enum Icons { ADD, API, APPS, ARTICLE }
当你这样声明枚举时,for in
将会报错,因为它不会有运行时的代码。所以并不建议将类型和运行混用
第 3 个答案:
目前能想到的一种解决办法
for (let key = 0; true; key++) { if (Icons[key]) { console.log(Icons[key]) } else { break; } }
第 4 个答案:
你把数字过滤掉不就行了
export enum Icons { ADD, API, APPS, ARTICLE } enum Icons { ADD , API, APPS, ARTICLE } console.log(Object.keys(Icons).filter(item => isNaN(Number(item)))) // ["ADD", "API", "APPS", "ARTICLE"]
请问,前辈们,我该如何获取‘num_next’变量,并且在‘add_month ...