最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

迭代字符串枚举

运维笔记admin13浏览0评论

迭代字符串枚举

迭代字符串枚举

我必须遗漏一些东西,但我找到了几种方法来迭代枚举但不是字符串枚举。

给出以下枚举:

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);
}

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论