如何使用 Typescript 从数组动态构建枚举

Vin*_*tez 6 typing dynamic typescript typescript-typings

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

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

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"...]
})
Run Code Online (Sandbox Code Playgroud)

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

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

enum iconName {
  HOME = 'home',
  ARROW_RIGHT = 'arrow-right',
  MENU = 'menu',
}
Run Code Online (Sandbox Code Playgroud)

谢谢 !

小智 2

您无法在运行时仅通过键创建实际的打字稿枚举。

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

为了达到这种效果,您需要在项目中的某个位置放置枚举,您的 IDE 无法神奇地知道您的目录中存在哪些图标。

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

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

enum MyEnum {

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

array.forEach(element => console.log(MyEnum[element as MyEnum])) 
Run Code Online (Sandbox Code Playgroud)