javascript - 迭代枚举 TypeScript
问题描述
我正在尝试迭代这个枚举。但是,我面临从枚举中提取值的问题。如果我给它一个像这样的硬编码字符串,我可以提取该值。
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 来说是全新的,所以可能会遗漏一些东西。
向任何能给我一些指导的人干杯。
解决方案
for-in
使用循环进行迭代时循环变量的类型enum Values
是隐式any
的,因此会出现编译错误。
for (let value in Values) {
console.log(Values[value]);
}
该变量value
的类型为any
,不能用于索引enum Values
。
在此处打开 TypeScript 中的问题。
如果您想遍历 的键值对,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);
});
推荐阅读
- php - 带有动态参数的 MySQL 查询 (PHP)
- sql - SQL Server 提示用户输入并传递给变量
- kotlin - 将字符串拆分成对
- django - 带有多个应用程序的 Django + Vue
- c - 当我在 C 中比较完全相同的字符串时,strcmp() 返回 10
- python - Python - 如何扩展 Pandas 数据框的行以包含键列值的所有组合?
- python - Django 向导表单和其他视图在一页中
- visual-studio - 是否可以从不同的机器上用 Visual Studio 打开一个项目?
- playframework-2.6 - play-mailer 是 smtp 服务器吗
- shell - HBase:COLUMN 和 FILTER (SingleColumnValueFilter) 之间的混淆