Pengubah akses mana yang tersirat ketika tidak ditentukan?

142

Untuk semua konsep berbeda yang mendukung pengubah akses, seperti bidang, properti, metode, dan kelas, pengubah akses mana yang tersirat jika tidak ditentukan?

Sam
sumber
@basarat, sudah lama sekali saya tidak menggunakan TypeScript, jadi sulit untuk mengingat cara kerjanya akhir-akhir ini! Sejauh yang saya ingat, jawaban Anda tampak masuk akal, tetapi saya merasa tidak cukup berwibawa bagi saya untuk menandainya sebagai benar. Apakah jawaban Anda berdasarkan pengalaman Anda dengan bahasa tersebut, atau dari info di spesifikasinya?
Sam
1
Untuk memperjelas pertanyaan dan jawaban ini, skrip jenis harus ditentukan dalam pertanyaan untuk membuatnya jelas. Ada tag skrip, tetapi itu adalah satu-satunya indikasi kami tidak membahas scala, java, C #, C ++, ....
absmiths

Jawaban:

220

Semua yang ada di dalam classadalah publicjika tidak ditentukan. Semua yang ada di a modulebersifat pribadi kecuali exportkata kunci digunakan.

basarat
sumber
6
Untuk orang yang bermain dengan starter kit. Beberapa dari mereka dikirimkan dengan tslint dan itu bisa sangat membingungkan. Saat Anda melihat pesan ini default access modifier on member/method not allowed Centang tslint.jsonuntuk mengizinkan pengubah akses default atau tersirat.
visheshd
1
Apakah mungkin menggunakan langkah pra-transparansi untuk menetapkan secara otomatis private?
Qwerty
-4

Saya tidak setuju

Segala sesuatu di kelas bersifat publik jika tidak ditentukan.

Semuanya bersifat publik, bahkan jika pribadi digunakan. Lihat saja kode yang ditranslasikan. Metode beranotasi pribadi akan tersedia untuk umum. Hanya transpiling yang akan menghasilkan kesalahan. Publik dan pribadi akan dikonversi menjadi<Object>.prototype.funcName

Jens Peters
sumber
26
Ya, ini poin yang bagus. Namun, pertanyaan saya which access modifiers are implied when not specifiedbukan can my code be accessed when an access modifier is not specified. Pengubah akses adalah konsep TypeScript daripada konsep JavaScript. Jadi menurut saya jawaban @basarat menjawab apa yang saya maksud dalam pertanyaan dan tampaknya benar dalam konteks pertanyaan tersebut. Mungkin ada beberapa ruang untuk membedakan kata-kata dalam tanya jawab.
Sam
Begitulah cara TS bekerja, ia akan mengkompilasi kode Anda tidak peduli apakah itu "benar" dari sudut pandang TS, ini menyiratkan semua yang ada di TS tanpa terkecuali kelas, tetapi poin utamanya adalah jika Anda menghormati peringatan TS - Anda tidak akan mengakses properti yang ditandai sebagai pribadi.
Andrew Bogdanov
4
Saya tidak dapat memikirkan bahasa apa pun yang sebenarnya bersifat pribadi. Dalam C # Anda dapat dengan mudah mencapai bidang pribadi apa pun melalui refleksi. Dalam bahasa tingkat rendah seperti C atau C ++, Anda bisa mendapatkan di bidang pribadi hanya dengan memindahkan penunjuk. Singkatnya perlindungan di tingkat OS, seperti DEP dan memori terenkripsi, pengubah akses hanyalah bantuan yang disediakan kompiler untuk membantu Anda menulis kode yang lebih baik. ...Baik?
pbarranis
Bidang JavaScript pribadi @pbarranis sebenarnya pribadi dan tidak ada cara untuk mengaksesnya dari dalam waktu proses JavaScript.
Yogu