2017-07-17 8 views
0

私は長い間Javaプログラマーですが、今ではTypeScriptを研究するためにAngularを勉強しています。Javaのようなパラメータを受け取るTypeScriptでEnumを実装することは可能ですか?

私は練習が簡単なものを開発しています。私はJavaの世界で私が列挙型を作成する状況に出くわしました。

TypeScriptはこのEnumの概念をサポートしていますが、Javaに比べてかなり制限されています。

TypeScriptでEnumの制限を回避するには、enumのように動作するクラスを使用することを考えました。

TypeScript世界の優れた方法に従って、実装を「正常」以下にしていますか?

Javaのようなパラメータを受け取るTypeScriptでEnumを実装することは可能ですか?それとも、これは本当にクラスを通してのみ可能ですか?

export class MyEnum { 

    public static readonly ENUM_VALUE1 = new MyEnum('val1_prop1', 'val1_prop2'); 
    public static readonly ENUM_VALUE2 = new MyEnum('val2_prop1', 'val2_prop2'); 
    public static readonly ENUM_VALUE3 = new MyEnum('val3_prop1', 'val3_prop2'); 

    private readonly _prop1: string; 
    private readonly _prop2: string; 

    private constructor(prop1: string, prop2: string){ 
     this._prop1 = prop1; 
     this._prop2 = prop2; 
    } 

    get prop1(): string{ 
     return this._prop1; 
    } 

    get prop2(): string{ 
     return this._prop2; 
    } 
} 

答えて

0

それは、Javaのようにパラメータを受け取る活字体で列挙型を実装することは可能ですか?それとも、これは本当にクラスを通してのみ可能ですか?

私はそう信じません。
この種のライブラリの周りにはいくつかのライブラリがあります:https://lmfinney.wordpress.com/2017/07/12/ts-enums-bringing-java-style-enums-to-typescript/

しかし、それは本当にあなたがやっていることのより完全なバージョンです。

0

強制的に、anyのような列挙型を以下のようにキャストできます。しかし、私はクラスのソリューションが良いと思う。

class MyEnumType { 
    constructor(public val1: number, public val2: number) { } 
} 

enum MyEnum { 
    Enum1 = <any>new MyEnumType(1, 2), 
    Enum2 = <any>new MyEnumType(3, 4) 
} 

let enum1 = MyEnum.Enum1; 
console.log(enum1 == MyEnum.Enum1); // true 
console.log((<MyEnumType><any>enum1).val1); // 1 
関連する問題