2016-07-22 15 views
2

に文字列リテラル型に文字列変数をキャストする方法を、どのように私は何かを行うことができ、私はsignature-活字体で活字体

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

と次のように関数を呼び出すしたいとlike-

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のためのこのタイプを使用する:あなたがいることを確信している場合

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

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

文字列リテラルの型に文字列をキャストすることを確認しますランタイム文字列は有効なオプションの1つで、文字列リテラル型を期待する関数の型に文字列をキャストできます。あなたのキャストを行うには

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

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

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

もう一つの方法は、そのようにタイプを付加することである:

foo(<Tristate> validInput); 

はあなたのランタイム文字列のデータについて、コンパイラの意見をオーバーライドすることに注意してください。実行時に、定義された3つの文字列以外の値がfoo関数に入る可能性があります。