【问题标题】:TypeScript function accept argument value from an enumTypeScript 函数接受来自枚举的参数值
【发布时间】:2015-09-17 10:05:50
【问题描述】:

下面的代码,参数genderenum type,值必须是["male","female"]之一,但是我想像judgeGender("male")这样简单地使用它,我该怎么做呢?

function judgeGender(gender){
    //......
}

【问题讨论】:

    标签: enums typescript


    【解决方案1】:

    你可以做的是接受一个字符串和check that it exists in the Enum,就像这样:

    enum Gender {Male, Female};
    
    function validGender(c: String) {
        if(enumHasValue(Gender, c)) {
            document.write(`valid gender: ${c}`);
        } else {
            document.write(`invalid gender: ${c}`);
        }
    }
    
    function enumHasValue(e, v) {
        for (var enumMember in e) {
            if (enumMember === v) {
                return true;
            }
        }
        return false;
    }
    
    validGender("Female"); // => "valid gender: Female"
    document.write("<br/>");
    validGender("Alien"); // => "invalid gender: Alien"
    

    TypeScript Playground 中尝试这个示例(复制并粘贴它,然后按运行)。

    【讨论】:

    • 你的建议很有帮助,谢谢你的回答:)
    • 如果我想对函数enumHasValue的参数e进行类型检查,就像function enumHasValue(e:??,v:string)一样,怎么做?
    【解决方案2】:

    您可以创建一个函数来解析gender 参数,如下所示:

    function parseGender(value : Gender | number | string) {
      var gender;
      if (value === Number(value)) {
        gender = <Gender>value;
      }
      else if (value === String(value)) {
        if (<string>value in Gender) {
          gender = Gender[value];
        }
      }
    
      if (!gender) throw new TypeError("The parameter gender is incorrect");
      return gender;
    }
    

    然后你可以在你的函数中使用它:

    function judgeGender(gender : Gender | number | string) {
      var g = parseGender(gender);
    
      // do whatever you want with g
    }
    

    【讨论】:

    • 哇,这是一个很好的解决方案,但是作为你的函数:parseGender(0)=&gt;0;parseGender("male")=&gt;0,然后我将gender = Gender[value]; 更改为gender = &lt;Type&gt;value;;所以parseGender(0)=&gt;0;parseGender("male")=&gt;"male"。我是不是做错了什么?
    【解决方案3】:

    您可以指定您的函数可以接收哪些值。

    type Male = "male";
    type Female = "female";
    
    enum Gender {
        Male = Male,
        Female = Female
    }
    
    function judgeGender(gender: Gender | Male | Female) {
        //......
    }
    
    judgeGender(Gender.Male);
    judgeGender("male");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多