迭代字符串枚举
我必须遗漏一些东西,但我找到了几种方法来迭代枚举但不是字符串枚举。
给出以下枚举:
export enum Locales {
En = 'en',
Fr = 'fr',
De = 'de',
Es = 'es',
It = 'it',
Nl = 'nl',
No = 'no',
Tr = 'tr',
}
我想要实现的目标:
我想迭代该字符串枚举,以便我得到值(!)。我尝试过的:
for (const key of Object.keys(Locales)) {
const locale: string = Locales[key];
console.log(locale); // Should print 'en', 'fr' and so on
}
上面代码的问题:
由于严格的tsconfig(不允许隐式anys)我无法将其编译为javascript。由于这不是我的项目,我也无法更改此tsconfig。它突出了key
上的Locales[key]
变量,这个错误对我有意义:
[ts]元素隐式具有“任意”类型,因为索引表达式不是“数字”类型。
问题:
在使用Typescript 2.6+获取它的值时,通过字符串枚举迭代的正确方法是什么?
回答如下:正如beta开发人员建议的那样,如果使用类型断言as keyof typeof Locales
,则可以获得正确的密钥类型。或者你可以将它包装在类型安全的Object.keys()
函数变体中,如下所示:
export enum Locales {
En = 'en',
Fr = 'fr',
De = 'de',
Es = 'es',
It = 'it',
Nl = 'nl',
No = 'no',
Tr = 'tr',
}
function enumKeys<E>(e: E): (keyof E)[] {
return Object.keys(e) as (keyof E)[];
}
for (const key of enumKeys(Locales)) {
const locale: string = Locales[key];
console.log(locale);
}
此外,为了记录,旧式for .. in
循环仍然有效:
for (let key in Locales) {
let locale = Locales[key];
console.log(locale);
}
迭代字符串枚举
我必须遗漏一些东西,但我找到了几种方法来迭代枚举但不是字符串枚举。
给出以下枚举:
export enum Locales {
En = 'en',
Fr = 'fr',
De = 'de',
Es = 'es',
It = 'it',
Nl = 'nl',
No = 'no',
Tr = 'tr',
}
我想要实现的目标:
我想迭代该字符串枚举,以便我得到值(!)。我尝试过的:
for (const key of Object.keys(Locales)) {
const locale: string = Locales[key];
console.log(locale); // Should print 'en', 'fr' and so on
}
上面代码的问题:
由于严格的tsconfig(不允许隐式anys)我无法将其编译为javascript。由于这不是我的项目,我也无法更改此tsconfig。它突出了key
上的Locales[key]
变量,这个错误对我有意义:
[ts]元素隐式具有“任意”类型,因为索引表达式不是“数字”类型。
问题:
在使用Typescript 2.6+获取它的值时,通过字符串枚举迭代的正确方法是什么?
回答如下:正如beta开发人员建议的那样,如果使用类型断言as keyof typeof Locales
,则可以获得正确的密钥类型。或者你可以将它包装在类型安全的Object.keys()
函数变体中,如下所示:
export enum Locales {
En = 'en',
Fr = 'fr',
De = 'de',
Es = 'es',
It = 'it',
Nl = 'nl',
No = 'no',
Tr = 'tr',
}
function enumKeys<E>(e: E): (keyof E)[] {
return Object.keys(e) as (keyof E)[];
}
for (const key of enumKeys(Locales)) {
const locale: string = Locales[key];
console.log(locale);
}
此外,为了记录,旧式for .. in
循环仍然有效:
for (let key in Locales) {
let locale = Locales[key];
console.log(locale);
}