2016-07-22 112 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函数。