【问题标题】:Iterate over enum, assign enum element as parameter遍历枚举,将枚举元素分配为参数
【发布时间】:2018-05-26 13:03:41
【问题描述】:

我想遍历一个枚举。当我遍历这个枚举时,我得到了键和值,但我只想将 Intances of Skill 添加到带有键的技能数组中。

enum eSkills {
    ACROBATICS = <any>"Acrobatics",
    APPRAISE = <any>"Appraise",
    BLUFF = <any>"Bluff",
    CLIMB = <any>"Climb",
    CRAFT = <any>"Craft"
}

class Skill {
    constructor(name: eSkills) {
        this.name = name;
    }

    name: eSkills;
}

let skills: Skill[] = [];

for (let skill in eSkills) {
    //TODO create new instance of Skill and push to skills array
}

我需要枚举的反向映射。

【问题讨论】:

  • 您想遍历eSkills 枚举并只按下按键?
  • 所以,skills.push(new Skill(skill))?
  • new Skill(skill) 存在错误 --> “字符串”类型的参数不能分配给“eSkills”类型的参数。。在skills 中还有名称等于枚举值的元素。 @Sagivb.g 是的。
  • 如果您只需要密钥,那么不应将name 输入为string 而不是eSkills

标签: javascript typescript enums


【解决方案1】:

我猜你已经尝试过了,但无济于事:

skills.push(new Skill(skill)); // Error: Argument of type 'string' is not assignable to parameter of type 'eSkills'.

您可以使用type assertion (as eSkills) 来解决此问题:

skills.push(new Skill(skill as eSkills));

demo

【讨论】:

  • 当我将任何断言添加到枚举值时。还有另一个错误,并且将枚举值作为名称的技能将被推送到数组中。我需要 anny 断言来进行枚举的反向映射。
  • link 为例。错误是 Type 'string' 不能转换为 type 'eSkills'
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 2011-09-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2014-09-20
  • 2016-06-08
  • 2015-08-19
相关资源
最近更新 更多