如何检查字符串枚举数组是否包含字符串

时间:2019-03-19 20:43:04

标签: typescript

我在打字稿中声明了一个枚举,如下所示:

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

并创建一个枚举值数组,如下所示:

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为什么抱怨此检查?即使我的代码有效,但是如果我做错了什么,该如何解决?

2 个答案:

答案 0 :(得分:0)

您需要将字符串转换为MultiPhaseUnits的类型。

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

答案 1 :(得分:0)

由于两种类型都是不同的,因此绝对不能进行搜索。一个是字符串,另一个是MultiPhaseUnits类型。

如果要这样搜索,则应编写一个getFunction,它返回对应字符串的MultiPhaseUnit类型。

如果(this.multiPhaseUnits.indexOf(MultiPhaseType(queryable.unit.apiUnit))> -1){...}

其中

 MultiPhaseUnits MultiPhaseType(string apiUnitStr)   
   {
      if('AMPERAGE' = apiUnitStr)   {
         return AMPERAGE;
   }
   else if('VOLTAGE' = apiUnitStr)   {
      return VOLTAGE;
   }...etc
   }