Enums TypeScript函数接受枚举中的参数值

Enums TypeScript函数接受枚举中的参数值,enums,typescript,Enums,Typescript,下面的代码,参数gender是enum type,值必须是[“male”,“female”]中的一个,但我想简单地像这样使用它judgenger(“male”),我怎么做? 您可以接受一个字符串,如下所示: enum Gender {Male, Female}; function validGender(c: String) { if(enumHasValue(Gender, c)) { document.write(`valid gender: ${c}`);

下面的代码,参数genderenum type,值必须是[“male”,“female”]中的一个,但我想简单地像这样使用它judgenger(“male”),我怎么做?


您可以接受一个字符串,如下所示:

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"
enum性别{男性,女性};
函数validGender(c:字符串){
if(enumHasValue(性别,c)){
编写(`有效性别:${c}`);
}否则{
document.write(`无效性别:${c}`);
}
}
函数枚举值(e,v){
for(e中的变量枚举成员){
如果(enumMember==v){
返回true;
}
}
返回false;
}
validGender(“女性”);//=>“有效性别:女性”
文件。写(“
”); validGender(“外国人”);//=>“无效性别:外国人”

在中尝试此示例(复制并粘贴它,然后按Run)。

您可以创建一个函数来解析
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;
}

可以指定函数可以接收的值

type Male = "male";
type Female = "female";

enum Gender {
    Male = Male,
    Female = Female
}

function judgeGender(gender: Gender | Male | Female) {
    //......
}

judgeGender(Gender.Male);
judgeGender("male");

您的建议非常有用,谢谢您的回答:)如果我想对函数
enumHasValue
的参数
e
进行类型检查,就像
函数enumHasValue(e:??,v:string)
,如何进行检查?哇,这是一个简洁的解决方案,但作为您的函数:
parseGender(0)=>0;parseGender(“男性”)=>0
,然后我更改
gender=gender[value]
性别=值;因此
parseGender(0)=>0;parseGender(“male”)=>“male”
。我做错什么了吗?
function judgeGender(gender : Gender | number | string) {
  var g = parseGender(gender);

  // do whatever you want with g
}
type Male = "male";
type Female = "female";

enum Gender {
    Male = Male,
    Female = Female
}

function judgeGender(gender: Gender | Male | Female) {
    //......
}

judgeGender(Gender.Male);
judgeGender("male");