Saya menerima nomor type = 3
dan harus memeriksa apakah ada di enum ini:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
Cara terbaik yang saya temukan adalah dengan mendapatkan semua Nilai Enum sebagai array dan menggunakan indexOf di atasnya. Tetapi kode yang dihasilkan tidak terlalu terbaca:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
Apakah ada cara yang lebih sederhana untuk melakukan ini?
javascript
typescript
enums
Tim Schoch
sumber
sumber
if(Object.values(MESSAGE_TYPE).includes(+type)
? Tidak banyak yang bisa Anda lakukan.!!MESSAGE_TYPE[type]
untuk memeriksa apakah ada nilai.MESSAGE_TYPE[type]
akan kembali tidak terdefinisi jika nilaitype
tidak ada padaMESSAGE_TYPE
0
, meskipun.MESSAGE_TYPE[type] !== undefined
Jawaban:
Jika Anda ingin ini berfungsi dengan string enums, Anda perlu menggunakan
Object.values(ENUM).includes(ENUM.value)
karena string enums tidak dipetakan secara terbalik, menurut https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html :menjadi:
Jadi, Anda hanya perlu melakukan:
Jika Anda mendapatkan kesalahan untuk
Property 'values' does not exist on type 'ObjectConstructor'
:, maka Anda tidak menargetkan ES2017. Anda dapat menggunakan konfigurasi tsconfig.json ini:Atau Anda bisa melakukan pemeran:
sumber
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
akan selalu benar, tetapi pertanyaannya adalah bagaimana memeriksa bahwa nilai yang diberikan termasuk dalam enum, misalnya(Object.values(Vehicle).includes('car'))
harus kembalitrue
tetapi(Object.values(Vehicle).includes('plane'))
harus kembali salah.Jika Anda menggunakan TypeScript, Anda dapat menggunakan enum yang sebenarnya . Kemudian Anda bisa memeriksanya menggunakan
in
.Ini hanya berfungsi jika enum Anda berbasis angka dan tidak ditandai
const
:Ini berfungsi karena ketika Anda mengkompilasi enum di atas, ia menghasilkan objek di bawah ini:
sumber
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
ke enum yang sebenarnya seperti yang Anda sarankan dan sekarang solusi Anda bekerja seperti pesona. Terima kasih @SaravanaTypeScript v3.7.3
sumber
Ada solusi yang sangat sederhana dan mudah untuk pertanyaan Anda:
sumber
Hasil perbedaan dalam log:
Solusinya, kita perlu menghapus kunci sebagai angka.
Pemakaian
sumber
Sesuai jawaban Ryan Cavanaugh , Anda cukup melakukan hal berikut untuk memeriksa apakah suatu nilai terkandung dalam enum yang diberikan:
sumber