Dalam TypeScript, const
kata kunci tidak dapat digunakan untuk mendeklarasikan properti kelas. Melakukannya menyebabkan kesalahan kompiler dengan "Anggota kelas tidak dapat memiliki kata kunci 'const'."
Saya menemukan diri saya perlu menunjukkan dengan jelas dalam kode bahwa properti tidak boleh diubah. Saya ingin IDE atau kompiler untuk kesalahan jika saya mencoba untuk memberikan nilai baru ke properti setelah dideklarasikan. Bagaimana kalian mencapai ini?
Saat ini saya menggunakan properti read-only, tetapi saya baru mengenal Typescript (dan JavaScript) dan bertanya-tanya apakah ada cara yang lebih baik:
get MY_CONSTANT():number {return 10};
Saya menggunakan naskah 1.8. Saran?
PS: Saya sekarang menggunakan naskah 2.0.3, jadi saya sudah menerima jawaban David
sumber
export
kata kunci sebelumclass
maupunpublic static
sebelumreadonly
kata kunci. Lihat di sini: stackoverflow.com/a/22993349export
(modul eksternal) danpublic
kata kunci yang terkait dengan pertanyaan ini / jawaban, tetapi pada topik ketegasan, saya pribadi merasa sangat mudah untuk mengatakan bahwa seorang anggota publik ketika kata kunci tidak ada. Saya tidak peduli dengan itu untuk alasan itu dan karena itu menambahkan lebih banyak suara & mengetik tidak perlu. Ini juga membuat anggota publik lebih berbeda dari yang ditandai sebagaiprivate
atauprotected
. Bagaimanapun, hanya pendapat saya :)static readonly myReadOnlyProperty
ketika kelas dideklarasikanexport default class { ... }
? Mencoba this.myVar, self.myVar, statis, default ... tidak berfungsi ... (EDIT: default.myVar tampaknya menjadi solusinya, tapi saya mendapatkan kesalahan ketik)Konstanta dapat dideklarasikan di luar kelas dan digunakan di dalam kelas Anda. Kalau tidak,
get
properti adalah solusi yang bagussumber
get
properti sangat tepat dalam kasus Andaexport const
dan kemudian mengimpornya dari file lain. Akan sangat mudah untuk diuji. Cukup nyatakan aconst
dalam satu file, dan coba gunakan di file lain tanpa ekspor / impor, atau gunakan dari konsol browser.Anda bisa menandai properti dengan
readonly
pengubah dalam deklarasi Anda:@lihat buku menyelam Deep TypeScript - Readonly
sumber
Angular 2 Menyediakan fitur yang sangat bagus yang disebut Konstanta Buram. Buat kelas & Tentukan semua konstanta di sana menggunakan konstanta buram.
Suntikkan di penyedia di app.module.ts
Anda akan dapat menggunakannya di setiap komponen.
EDIT untuk Angular 4:
Untuk Angular 4 konsep baru adalah Token Injeksi & Token Tidak Berlaku dalam Angular 4.
Injeksi Token Menambahkan fungsi di atas Token Buram, memungkinkan untuk melampirkan info jenis pada token melalui generik TypeScript, ditambah token Injeksi, menghilangkan kebutuhan menambahkan @Inject
Kode Contoh
Sudut 2 Menggunakan Token Buram
Sudut 4 Menggunakan Token Injeksi
Token injeksi dirancang secara logis di atas Token buram & Token buram tidak digunakan lagi dalam Angular 4.
sumber
Baik menggunakan pengubah readOnly dengan konstanta yang harus dideklarasikan atau orang mungkin mendeklarasikan konstanta di luar kelas dan menggunakannya secara khusus hanya di kelas yang diperlukan menggunakan operator get.
sumber
Untuk ini, Anda dapat menggunakan
readonly
pengubah. Properti objek yangreadonly
hanya dapat ditugaskan selama inisialisasi objek.Contoh di kelas:
Contoh dalam Objek literal:
Perlu juga diketahui bahwa
readonly
modifikator adalah murni sebuah konstruksi naskah dan ketika TS dikompilasi ke JS, konstruksi tersebut tidak akan ada dalam JS yang dikompilasi. Ketika kita memodifikasi properti yang hanya dibaca, kompiler TS akan memperingatkan kita tentang hal itu (ini adalah JS yang valid).sumber
Bagi saya tidak ada jawaban sebelumnya yang berfungsi. Saya memang perlu mengubah kelas statis saya menjadi enum. Seperti ini:
Kemudian di komponen saya, saya menambahkan properti baru seperti yang disarankan dalam jawaban lain
Kemudian dalam template komponen saya, saya menggunakannya dengan cara ini
EDIT: Maaf. Masalah saya berbeda dari OP. Saya masih meninggalkan ini di sini jika seseorang memiliki masalah yang sama dengan saya.
sumber