【问题标题】:Iterating over enums TypeScript迭代枚举 TypeScript
【发布时间】:2021-06-19 11:41:22
【问题描述】:

我正在尝试迭代这个枚举。 但是,我面临从枚举中提取值的问题。 如果我给它一个这样的硬编码字符串,我可以提取值。

export enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

console.log(Values['TWO']);


但只要我给它枚举中的多个字符串值,如下所示。

export enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

for (let value in Values) {
  console.log(Values[value]);
}

它给出了以下错误:

error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof Values'.
  No index signature with a parameter of type 'string' was found on type 'typeof Values'.

25   console.log(Values[value]);

对 TypeScript 来说是全新的,所以可能会遗漏一些东西。

向任何能给我一些指导的人干杯。

【问题讨论】:

标签: javascript typescript loops enums


【解决方案1】:

使用for-in 循环遍历enum Values 时循环变量的类型隐式为any,因此会出现编译错误。

for (let value in Values) {
  console.log(Values[value]);
}

变量value的类型为any,不能用于索引enum Values

在 TypeScript here 中打开问题。

如果您想遍历enum 的键值对,您可以在Object.entries 的帮助下进行:

enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

//Both key and value
Object.entries(Values).forEach(([key, value]) => {
    console.log(key, value)
});

//keys
Object.keys(Values).forEach(key => {
    console.log(key);
});

//values
Object.values(Values).forEach(value => {
    console.log(value);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2018-02-07
    • 2011-10-06
    • 2012-06-08
    • 2013-05-11
    • 2017-02-03
    • 2018-06-02
    相关资源
    最近更新 更多