Как передать параметр enum из цикла? - PullRequest
1 голос
/ 09 апреля 2019

Рассмотрим код ниже.Я предположил, что мог бы перебрать перечисление и передать его экземпляр функции, которая принимает перечисление в качестве параметра.

Однако, похоже, let color in Colors породило color строки типа вместо типа Colors.Я что-то пропустил?Почему цикл enum не производит значение указанного Enum?

enum Colors {
    Red = "Red",
    Green = "Green",
    Yellow = "Yellow"
}

for (let color in Colors) {
  doStuff(color);
}

function doStuff(mycolor: Colors) {
  console.log(mycolor)
}

1 Ответ

3 голосов
/ 09 апреля 2019

Используйте Object.values, поскольку цикл for просто обрабатывает его как итерацию по объекту.

enum Colors {
  Red = "Red",
  Green = "Green",
  Yellow = "Yellow"
}

function doStuff(mycolor: Colors): void {
  console.log(mycolor);
}

Object.values(Colors).forEach(color => doStuff(color));

Полагаю, цвета - это только значения, а не записи перечисления, так как вы также можете использовать это:

Object.entries(Colors).forEach((color: [string, Colors]) => doStuff(color[1]));

Также имейте в виду, что для циклов , как правило, не годятся для вещей, которые не имеют операторов if или switch.Интересно, что если вы добавите более глубокую логику в цикл for, TypeScript определит тип:

for (const color in Colors) {
  if (color === Colors.Green) { 
    // Now the cat is either dead or alive 
    doStuff(color);
  }
}

Object.entries все еще новый, поэтому убедитесь, что ваш tsconfig.json ссылается на es2017 как запись для compilerOptions/lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...