我在打字稿中声明了一个枚举,如下所示:
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为什么抱怨此检查?即使我的代码有效,但是如果我做错了什么,该如何解决?
答案 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
}