Как проверить, содержит ли массив строковых перечислений строку

#typescript

#typescript

Вопрос:

Я объявил перечисление в typescript следующим образом:

 enum MultiPhaseUnits {
    AMPERAGE = 'AMPERAGE',
    VOLTAGE = 'VOLTAGE',
    POWER_FACTOR = 'POWER_FACTOR',
    LINE_VOLTAGE = 'LINE_VOLTAGE'
}
  

и создал массив значений enum как таковой:

 this.multiPhaseUnits = [MultiPhaseUnits.AMPERAGE, MultiPhaseUnits.LINE_VOLTAGE, MultiPhaseUnits.POWER_FACTOR, MultiPhaseUnits.VOLTAGE];
  

Моя проблема в том, что когда я захожу проверить, включена ли строка в этот массив, VSCode сообщает parameter of type string is not assignable to parameter of type MultiPhaseUnit . Например:

 if (this.multiPhaseUnits.indexOf(queryable.unit.apiUnit) > -1) {...}
  

Он помещает красную закорючку под queryable.unit.apiUnit , где apiUnit — строка в форме AMPERAGE, LINE_VOLTAGE... . Я проверил, что этот код будет работать, и убедился, что массив multiPhaseUnits[] в конечном итоге будет по сути массивом строк. Почему VSCode жалуется на эту проверку? Даже если мой код работает, если я делаю что-то неправильно, как я могу это исправить?

Ответ №1:

Вам нужно преобразовать строку в тип MultiPhaseUnits.

 if (this.multiPhaseUnits.indexOf(MultiPhaseUnits[queryable.unit.apiUnit]) > -1)
  

Комментарии:

1. Это было оно! Спасибо!