1

Code below,the parameter gender is enum type,the value must be one of ["male","female"],but I want to use it simply like this judgeGender("male"),how can I make it?

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

3 Answers 3

1

What you could do is accept a String and check that it exists in the Enum, like so:

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"

Try this example out in the TypeScript Playground (copy and paste it in and press Run).

Sign up to request clarification or add additional context in comments.

3 Comments

Your suggestion is very helpfull,thanks for your answer :)
If I wanna to make a type check to the parameter e of the function enumHasValue,just like function enumHasValue(e:??,v:string),how to make it?
1

You can create a function to parse the gender parameter, like this:

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;
}

And then you can use it inside your function:

function judgeGender(gender : Gender | number | string) {
  var g = parseGender(gender);

  // do whatever you want with g
}

1 Comment

Wow,it's a neat solution,but as your function: parseGender(0)=>0;parseGender("male")=>0 ,then I change gender = Gender[value]; to gender = <Type>value;;so parseGender(0)=>0;parseGender("male")=>"male". Did I do something wrong?
1

You can specify which values your function can receive.

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

enum Gender {
    Male = Male,
    Female = Female
}

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.