首页 > 解决方案 > 如何使用 Typescript 从数组动态构建枚举

问题描述

我想从文件列表中动态构建我的打字稿枚举,但我不知道该怎么做。

这是我为获取值数组而编写的代码:

const fs = require('fs');

fs.readdir('./src/assets/icons', (err, files) => {
  const name = files
    .filter(file => file.match('.svg'))
    .map(fileFiltred => fileFiltred.replace('.svg', ''))

  console.log(name) // ["arrow-right", "home", "menu"...]
})

我们可以动态构建一个打字稿枚举吗?如何 ?

您认为我必须在我的文件夹中手动编写所有图标名称,如下所示?

enum iconName {
  HOME = 'home',
  ARROW_RIGHT = 'arrow-right',
  MENU = 'menu',
}

谢谢 !

标签: typescriptdynamictypescript-typingstyping

解决方案


您不能在运行时仅从键创建实际的打字稿枚举。

无论如何,您将如何使用它?枚举是为了确保您没有在代码中使用您之前未在枚举中定义的任何未知值。

要获得这种效果,您需要在项目中的某个位置拥有枚举,您的 IDE 无法神奇地知道目录中存在哪些图标。

您可以做的是,在获得图标名称列表后,检查这些图标名称是否存在于您的枚举中:

let array: string[] = ["arrow-right", "home", "menu"];

enum MyEnum {

    home = 'home',
    svg = 'svg'
}

array.forEach(element => console.log(MyEnum[element as MyEnum])) 

推荐阅读