私はインターフェイスを宣言し、その型の変数を使用して列挙型にアクセスします。TypeScriptは列挙型で何かが変更されると不平を言うので、インターフェイスと列挙型を同期させることは実際には簡単です。
エラーTS2345:タイプ 'typeof EAbFlagEnum'の引数は、タイプ 'IAbFlagEnum'のパラメーターに割り当てることができません。タイプ 'typeof EAbFlagEnum'にプロパティ 'Move'がありません。
このメソッドの利点は、さまざまな状況で列挙型(インターフェース)を使用するために型キャストが必要ないため、スイッチ/ケースなど、より多くのタイプの状況がサポートされることです。
// Declare a TypeScript enum using unique string
// (per hack mentioned by zjc0816)
enum EAbFlagEnum {
None = <any> "none",
Select = <any> "sel",
Move = <any> "mov",
Edit = <any> "edit",
Sort = <any> "sort",
Clone = <any> "clone"
}
// Create an interface that shadows the enum
// and asserts that members are a type of any
interface IAbFlagEnum {
None: any;
Select: any;
Move: any;
Edit: any;
Sort: any;
Clone: any;
}
// Export a variable of type interface that points to the enum
export var AbFlagEnum: IAbFlagEnum = EAbFlagEnum;
列挙型ではなく変数を使用すると、望ましい結果が得られます。
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
フラグは私にとってもう1つの必需品だったので、この例に追加してテストを含むNPMモジュールを作成しました。
https://github.com/djabraham/ts-enum-tools