Saya ingin mengulang jenis TypeScript enum
dan mendapatkan setiap nama simbol yang disebutkan, misalnya:
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
sumber
sumber
getAllEnumValues
dangetAllEnumKeys
untuk tujuan AndaJawaban:
Kode yang Anda poskan akan berfungsi; itu akan mencetak semua anggota enum, termasuk nilai-nilai anggota enum. Misalnya, kode berikut:
Akan mencetak yang berikut:
Jika Anda hanya menginginkan nama anggota saja, dan bukan nilainya, Anda dapat melakukan sesuatu seperti ini:
Itu akan mencetak hanya nama-nama:
Peringatan: ini sedikit bergantung pada detail implementasi: TypeScript mengkompilasi enum ke objek JS dengan nilai enum menjadi anggota objek. Jika TS memutuskan untuk menerapkannya secara berbeda di masa depan, teknik di atas bisa pecah.
sumber
+enumMember >= 0
seharusnyaisFinite(+enumMember)
karena nilai negatif atau floating point dipetakan terbalik juga. ( Taman bermain )Meskipun jawabannya sudah disediakan, Hampir tidak ada yang menunjuk ke dokumen
Ini cuplikan
Perlu diingat bahwa anggota string enum tidak mendapatkan pemetaan terbalik yang dihasilkan sama sekali.
sumber
0
atau1
dari enum ini?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
? Pada [email protected] berfungsi dengan baik untuk saya ...Dengan asumsi Anda mematuhi aturan dan hanya menghasilkan enum dengan nilai numerik, Anda dapat menggunakan kode ini. Ini dengan benar menangani kasus di mana Anda memiliki nama yang secara kebetulan merupakan nomor yang valid
sumber
Bagi saya cara yang lebih mudah, praktis dan langsung untuk memahami apa yang sedang terjadi, adalah dengan cara penghitungan berikut:
Pada dasarnya akan dikonversi menjadi ini:
Karena itu, yang berikut ini akan benar:
Ini menciptakan cara mudah untuk mendapatkan nama yang disebutkan sebagai berikut:
Itu juga menciptakan cara yang bagus untuk mengonversi string ke nilai yang disebutkan.
Dua situasi di atas adalah situasi yang jauh lebih umum, karena biasanya Anda jauh lebih tertarik pada nama nilai tertentu dan membuat cerita bersambung dengan cara yang umum.
sumber
Jika Anda hanya mencari nama dan beralih lagi gunakan:
sumber
Object.values(myEnum).filter(value => typeof value === 'string') as string[];
Object.values(myEnum).filter(value => typeof value === 'string').map(key => { return {id: myEnum[key], type: key }; });
Dengan TypeScript Versi 1.8.9 yang sekarang saya gunakan mengetikkan Enums:
dengan hasil dalam objek Javascript ini:
jadi saya harus mencari melalui kunci dan nilai dan hanya mengembalikan nilai:
Dan saya menerima tombol opsi dalam Array:
sumber
Pada TypeScript 2.4, enum dapat berisi intializers string https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Ini memungkinkan Anda untuk menulis:
dan dapatkan output ini:
sumber
Solusi ini juga berfungsi.
sumber
Solusi menarik lain yang ditemukan di sini adalah menggunakan ES6 Map:
MENGGUNAKAN
sumber
Biarkan
ts-enum-util
( github , npm ) melakukan pekerjaan untuk Anda dan menyediakan banyak utilitas tipe-aman tambahan. Bekerja dengan string dan enum numerik, dengan benar mengabaikan entri numerik indeks pencarian terbalik untuk enum numerik:String enum:
Angka numerik:
sumber
Mulai dari TypeScript 2.4, enum tidak akan berisi kunci sebagai anggota lagi. sumber dari readScript TypeScript
Solusi saya:
sumber
Anda dapat menggunakan
enum-values
paket yang saya tulis ketika saya memiliki masalah yang sama:Git: enum-values
sumber
Berdasarkan beberapa jawaban di atas, saya menemukan tanda tangan fungsi aman-jenis ini:
Pemakaian:
jenis
stringVals
yaitu'entry1' | 'entry2'
Lihat itu dalam aksi
sumber
(keyof T)[]
sebagai gantikeyof T
. Juga,export
berhenti bermain Anda dari bekerja.Tampaknya tidak ada jawaban di sini yang akan bekerja dengan string-enums di
strict
-mode.Pertimbangkan enum sebagai:
Mengakses ini dengan
AnimalEnum["dog"]
dapat mengakibatkan kesalahan seperti:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
.Solusi yang tepat untuk kasus itu, tulis sebagai:
sumber
keyof
dengantypeof
! Solusi lain tampaknya cukup buram, tetapi bagaimanapun juga saya pikir Typescript perlu terus meningkatkan DX - Pengalaman Pengembang untuk EnumCara terbaik yang saya pikirkan adalah dengan mendeklarasikan nilai enum yang diinginkan. Dengan cara mengaksesnya bersih dan cantik (setiap saat).
akan menghasilkan:
sumber
Menurut dokumentasi TypeScript, kita dapat melakukan ini melalui Enum dengan fungsi statis.
Dapatkan Nama Enum dengan fungsi statis
untuk membaca lebih lanjut tentang Enum dengan fungsi statis ikuti tautan di bawah ini https://basarat.gitbooks.io/typescript/docs/enums.html
sumber
Satu-satunya solusi yang bekerja untuk saya dalam semua kasus (meskipun nilai adalah string) adalah sebagai berikut:
sumber
Pertanyaan lama, tetapi, mengapa tidak menggunakan
const
peta objek?Alih-alih melakukan ini:
Lakukan ini (perhatikan para
as const
pemain):sumber
console.log(Object.keys(Foo))
dalam contoh pertama hanya mengembalikan["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
Saya menemukan pertanyaan ini dengan mencari "TypeScript iterate over enum keys". Jadi saya hanya ingin memposting solusi yang cocok untuk saya dalam kasus saya. Mungkin itu akan membantu seseorang juga.
Kasus saya adalah sebagai berikut: Saya ingin mengulangi setiap kunci enum, lalu menyaring beberapa kunci, lalu mengakses beberapa objek yang memiliki kunci sebagai nilai yang dihitung dari enum. Jadi ini adalah bagaimana saya melakukannya tanpa ada kesalahan TS.
sumber
Saya menulis kelas EnumUtil yang membuat pemeriksaan tipe dengan nilai enum:
Bagaimana cara menggunakannya:
Hasil untuk kunci NumberValueEnum: ["A", "B"]
Hasil untuk nilai-nilai NumberValueEnum: [0, 1]
Hasil untuk StringValueEnumkeys: ["A", "B"]
Hasil untuk StringValueEnumvalues: ["A", "B"]
sumber
Saya menemukan solusi itu lebih elegan:
Ini menampilkan:
sumber
Enum saya seperti ini:
jadi pengembalian ini tidak ditentukan :
Untuk mengatasi masalah ini, saya memilih cara lain untuk melakukannya menggunakan Pipa:
Dan untuk menggunakannya:
sumber
Jika Anda memiliki enum
Maka Anda bisa mendapatkan kunci dan nilai-nilai seperti:
sumber
Argument of type '(d: Diet) => void' is not assignable to parameter of type '(value: string, index: number, array: string[]) => void'. Types of parameters 'd' and 'value' are incompatible. Type 'string' is not assignable to type 'MyEnum'.(2345)
Saya menulis fungsi pembantu untuk menyebutkan enum:
Pemakaian:
Fungsi mengembalikan sesuatu yang dapat dengan mudah disebutkan, dan juga dilemparkan ke tipe enum.
sumber
Menggunakan versi saat ini TypeScript Anda dapat menggunakan fungsi seperti ini untuk memetakan Enum ke catatan pilihan Anda. Perhatikan bahwa Anda tidak dapat menentukan nilai string dengan fungsi-fungsi ini karena mereka mencari kunci dengan nilai yang merupakan angka.
sumber
Sudah ada banyak jawaban di sini, tetapi saya kira saya akan membuang solusi saya ke tumpukan.
TypeScript Playground
Untuk kejelasan:
Referensi untuk Record TypeScript
Fungsi pembantu yang bagus:
sumber
Untuk mendapatkan daftar nilai enum yang harus Anda gunakan:
sumber
Ini bukan jawaban tepat atas pertanyaan Anda, tetapi itu adalah trik untuk mengatasi masalah Anda.
Anda dapat memperluas model daftar dengan cara yang Anda inginkan.
Sekarang, Anda dapat menggunakannya dengan cara ini:
atau:
sumber