2017-06-22 4 views
1
で文字列リテラルタイプのため
+0

タイプ値と実行時を取得できません。なぜ文字列列挙を使用しないのですか? – Saravana

+0

私を見せてもらえますか? – Sammy

答えて

1

:あなたは、文字列ベースの列挙型を使用することができます戻り値は引数の型についてアサーションを作成する関数です。コンパイラは、関数がtrueを返すとき、引数は指定された型を持つことを知っています。

残念ながら、文字列を繰り返したり明示的なテストを最低1回は書く必要はありませんが、コードを一度書くだけで型チェックを拡張して値を安全にカバーすることができます。

+0

ありがとうございます。両方の答えが働く。私は選ぶべきか分からない!パフォーマンス面では? – Sammy

2

コンパイル時に型が削除されるため、型は比較のために使用できません。次に、あなたのコード内で

function isAdmin(arg: string): arg is Admin { 
    return arg === 'ADMIN' || arg === 'AGENT'; 
} 

let role: string = localStorage.getItem('role'); 
if (isAdmin(role)) { 
    ... here role has the type Admin ... 
} 

型ガードは特殊な形式であるあなたはタイプのガードを作成する必要があります

enum Role { 
    "ADMIN", 
    "AGENT" 
} 

let role = localStorage.getItem("role"); 

if (role && role in Role) { 
    console.log("role exists"); 
}; 
関連する問題