【发布时间】:2015-09-17 10:05:50
【问题描述】:
下面的代码,参数gender是enum type,值必须是["male","female"]之一,但是我想像judgeGender("male")这样简单地使用它,我该怎么做呢?
function judgeGender(gender){
//......
}
【问题讨论】:
标签: enums typescript
下面的代码,参数gender是enum type,值必须是["male","female"]之一,但是我想像judgeGender("male")这样简单地使用它,我该怎么做呢?
function judgeGender(gender){
//......
}
【问题讨论】:
标签: enums typescript
你可以做的是接受一个字符串和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)一样,怎么做?
您可以创建一个函数来解析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)=>0;parseGender("male")=>0,然后我将gender = Gender[value]; 更改为gender = <Type>value;;所以parseGender(0)=>0;parseGender("male")=>"male"。我是不是做错了什么?
您可以指定您的函数可以接收哪些值。
type Male = "male";
type Female = "female";
enum Gender {
Male = Male,
Female = Female
}
function judgeGender(gender: Gender | Male | Female) {
//......
}
judgeGender(Gender.Male);
judgeGender("male");
【讨论】: