2017-09-20 6 views
0

enumsが便利なサービスからデータを取得します。データは読みやすさの点でやや不便ですが、私はenumをより読みやすくしたいと思います。暗号化された値から読み取り可能な列挙型への変換

不都合な文字列からenum値をインスタンス化するにはどうすればよいですか?

export enum Status { 
    ENROLLED = "a", 
    PENDING = "asdf", 
    NOT_ENROLLED = "f" 
} 

let incoming = "asdf"; 
let status: Status = ...? 

答えて

1

さて、あなたは(妥当性についてincomingをチェックする)安全性を気にしないならば、あなたはincomingタイプStatusであることだけを主張することができます

let status: Status = incoming as Status; 

Statusstringのサブタイプであるためです(実際には文字列リテラル値"a"|"asdf"|"f"のサブタイプです)。


あなたが安全性についてケアを行う場合は、あなたが最初にチェックして、文字列が有効なStatusでない場合undefinedを返すか、例外をスローする機能を行うことができます。

function toStatus(x: string): Status | undefined { 
    return (Object.keys(Status).some(k => Status[k as any] === x)) ? x as Status : void 0; 
} 

let status: Status | undefined = toStatus(incoming); 

if (!status) { 
    // invalid status 
    console.log("I am sad."); 
} else { 
    // valid status 
    console.log("I am happy."); 
    switch (status) { 
    // ... whatever you want to do here 
    } 
} 

希望に役立ちます。がんばろう!

関連する問題