2017-03-13 21 views
1

typescriptでenumをマップする適切な方法は何ですか?例えばtypescriptの列挙型のマッピング

私はオンラインtypescriptですコードエディタで遊んでいますし、これは正常に動作します:

class Message 
{ 
    name: string; 
    min: number; 
    max: number; 
    messageType: MessageType; 
} 

enum MessageType 
{ 
    none, 
    email, 
    sms 

} 

var jsonObj = { 
    "name": "some name", 
    "min": 0, 
    "max": 10, 
    "messageType": MessageType.email 

} 

var messageInstance: Message = <Message>jsonObj; 

console.log(messageInstance); 

私はJSONファイルでそれを使用している場合しかし、私のIDEでMessageType.emailは「期待値」のエラーが表示されます。

私がしようとした場合:

"messageType": "MessageType.email" 

エラーを生成し、オンラインコードエディタで。

私はちょうど始めており、これをどうやって行うべきかについての明確な指示を見つけることができません。

編集:

私はちょうど実現列挙型は、数はそう"messageType": 2または任意の対応する番号を行くための正しい方法だろう基づいています。

jsonファイルにenum定義がないので、jsonファイル(つまり値としてMessageType.emailのようなもの)で列挙型を読むことができる方法はありますか?混乱する可能性があります可能であれば、むしろそのように行う。..活字体2.4+のために

答えて

2

を:

あなたは代わりに、数値列挙の文字列の列挙型を使用することができます古いため

enum MessageType 
{ 
    none = "none", 
    email = "email", 
    sms = "sms" 
} 

活字体のバージョン:

あなたはenumのインデクサを使用してstringenum値を変換することができます:他の道を進ん

const messageTypeAsString = MessageType[MessageType.email]; 

はあまりにも動作します。私の知る限りとして

const messageType: MessageType = MessageType[messageTypeAsString]; 

JSONのシリアライズ/デシリアライズ時にこの変換を自動化する方法がないことを知ってください。

class MessageType { 
    static readonly none = 'none'; 
    static readonly email = 'email'; 
    static readonly sms = 'sms'; 
} 
type MessageTypeValue = 'none' | 'email' | 'sms'; 

const messageType: MessageTypeValue = MessageType.none; 
+0

感謝を:

他のオプションは完全にenumをスキップして、代わりに静的string Sを使用することです。私はこの構文に慣れていない: 'type MessageTypeValue = 'none' | | 'SMS'; 「これは何と呼ばれていますか? – Guerrilla

+0

[タイプエイリアス](https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-aliases)です。それは ''none' 'という共用体型に相当する' MessageTypeValue'という型を作成します。 | 'sms''。 –

関連する問題