2015-09-17 115 views
1

代碼中的枚舉接受參數值,參數genderenum type,該值必須是["male","female"]之一,但我想用它只是這樣judgeGender("male"),我該怎麼做呢? 打字稿功能從下面

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

你有什麼想法嗎? – lenz

回答

1

你可以做的是接受一個String和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(複製和粘貼,然後按運行)。

+0

你的建議是非常有用的,謝謝你的回答:) – codelegant

+0

如果我想對函數enumHasValue的參數'e'進行類型檢查,就像'function enumHasValue(e:??,v:string) ',如何製作它? – codelegant

+0

[看看這個問題](https://stackoverflow.com/questions/30774874/enum-as-parameter-in-typescript)。 – sdgluck

1

您可以創建一個函數來解析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 
} 
+0

哇,這是一個很好的解決方案,但作爲你的函數:'parseGender(0)=> 0; parseGender(「male」)=> 0',然後我改變gender = gender [value];'gender = 值;';所以'parseGender(0)=> 0; parseGender(「男」)=>「男」'。我做錯什麼了嗎? – codelegant

1

您可以指定哪些值你能功能接收。

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

enum Gender { 
    Male = Male, 
    Female = Female 
} 

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

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