Saya hanya mendeklarasikan antarmuka dan menggunakan variabel jenis itu mengakses enum. Menjaga antarmuka dan enum tetap sinkron sebenarnya mudah, karena TypeScript mengeluh jika ada perubahan di enum, seperti itu.
kesalahan TS2345: Argumen tipe 'typeof EAbFlagEnum' tidak dapat ditugaskan ke parameter tipe 'IAbFlagEnum'. Properti 'Move' tidak ada dalam tipe 'typeof EAbFlagEnum'.
Keuntungan dari metode ini adalah tidak diperlukan pengecoran tipe untuk menggunakan enum (antarmuka) dalam berbagai situasi, dan dengan demikian lebih banyak jenis situasi yang didukung, seperti sakelar / kasing.
// 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;
Menggunakan variabel, daripada enum, menghasilkan hasil yang diinginkan.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Bendera adalah kebutuhan lain bagi saya, jadi saya membuat modul NPM yang menambah contoh ini, dan termasuk tes.
https://github.com/djabraham/ts-enum-tools