2016-11-29 8 views
5

私はtypescriptですでカスタムタイプを定義している:typescriptでカスタムタイプを反復処理する方法は?

export type Market = 'au'|'br'|'de'; 

は、今私は冗長に感じ、私は忘れることがあり、それとして、最初の場所でMarket[]の配列を作成することなく、それぞれの可能Marketを反復処理したいです1つのオプションを追加してください:

const markets: Market[] = ['au', 'br', 'de']; 
markets.forEach((market: Market) => { 
    console.log(market); 
}); 

typescriptでこれを達成する方法はありますか?

+1

これは不可能ですが、私は実際にTSチームに、実行時に利用可能な型のイントロスペクションのようなものを追加したいと思います。 – Paleo

+0

タイプエイリアス(およびインターフェイス)の全ポイントは、それらがjavascriptにコンパイルされないということです。コンパイルのために何かをしたい場合は、それを使うことができますが、実行時に必要な場合は、jsに存在するものを使用する必要があります。 –

答えて

2

いいえ、そのような純粋な型情報は実行時に存在しないため、できません。

これは、文字列の通常のリストを定義してからそれから'au'|'br'|'de'型を派生させるのが仮説的ですが、TypeScriptコンパイラ(2.0または2.1)は現在、あなた - 私が知っている限り、市場の種類は常にstring[]になります。

正しい答えはenumを使用することです。彼らはそれぞれの値を持つ型を定義し、すべての文字列値のリストを得ることができます:How to programmatically enumerate an enum type in Typescript 0.9.5?

列挙型の欠点は、ランタイム表現が異なることです(実際には文字列ではなく、実際には文字列ではありません)。あなたのコードでは、読みやすい値として扱うことができますが、実行時に文字列名が必要な場合は、文字列に変換する必要があります。これは簡単です:enum MarketEnumと値myEnumValueの場合、MarketEnum[myEnumValue]は文字列としての値の名前です)。

関連する問題