Как динамически построить перечисление из массива с помощью Typescript - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу динамически построить мой набор машинописи из списка файлов, но я не знаю, как это сделать.

Вот код Я написал, чтобы получить массив значений:

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',
}

Спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Вы не можете создать фактическое перечисление машинописи только из ключей во время выполнения.

Как бы вы его использовали? Перечисления существуют, чтобы убедиться, что вы не используете неизвестные значения в вашем коде, которые вы ранее не определяли в своем перечислении.

Чтобы получить этот эффект, вам понадобится перечисление где-нибудь в вашем проекте, ваша IDE не может волшебным образом знать, какие значки присутствуют в вашем каталоге.

Что вы можете сделать, после того, как вы получили список имен значков, проверьте, присутствуют ли эти имена значков в вашем перечислении:

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

enum MyEnum {

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

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