2016-07-22 111 views
2

一個字符串變量轉換爲一個字符串類型在打字稿,假設我要調用一個函數與下面的簽名工具如何打字稿

function foo(param: "TRUE"|"FALSE"|"NONE") 

我怎麼可以做一些喜歡 -

var str = runtimeString() 
if(str === "TRUE" | str === "FALSE" | str === "NONE") 
    foo(str) 

或者,明確值是唯一way-

var str = runtimeString() 
if(str === "TRUE") 
    foo("TRUE") 
else if(str === "FALSE") 
    foo("FALSE") 
else if(str === "NONE") 
    foo("NONE") 

回答

5

創建一個字符串類型,如下所示:

type NullableBoolean = "TRUE" | "FALSE" | "NONE"; 

在函數定義,使用這種類型param

function foo(param: NullableBoolean) 
{ 
    ... 
} 

確保將字符串轉換爲字符串常量類型:

var str = runtimeString(); 
if(str === "TRUE" || str === "FALSE" || str === "NONE") 
    foo(<NullableBoolean>str); 
3

如果您確信該運行時字符串是有效的選項之一,您可以將您的字符串轉換爲需要字符串文字類型的函數類型。

type Tristate = "TRUE"|"FALSE"|"NONE"; 

function foo(param: Tristate) { 
    return "enhanced: " + param; 
} 

let validInput = "NONE"; 
foo(validInput as Tristate); 

另一種方式做你的轉換是通過預先的類型,像這樣:

foo(<Tristate> validInput); 

請注意,您可以覆蓋約在運行時的字符串的數據編譯器的意見。所以在運行時有一種可能性,除了定義的三個字符串以外的值將會進入foo函數。