Accessibility Modifiers
@ts-check
Dukungan JSDoc terhadap TypeScript telah diperluas untuk
mendukung pengubah izin akses pada atribut kelas. Ada:
@public - yang merupakan nilai anggapan.
@private - atribut yang memiliki izin akses ini
hanya dapat diakses pada kelas yang sama
dimana atribut ini ditetapkan.
@protected - atribut yang memiliki izin akses ini
dapat diakses pada kelas dimana
atribut ini ditetapkan dan kelas-kelas turunannya.
Di bawah ini merupakan sebuah kelas dasar yang bernama Binatang,
kelas ini memiliki sebuah atribut `private` dan `protected`.
Kelas turunan dari Binatang dapat mengakses "this.cepat"
tapi tidak bisa mengakses "this.tipe".
Diluar kelas-kelas tersebut, kedua atribut tidak terlihat
dan akan mengembalikan kesalahan kompilasi ketika // @ts-check
diaktifkan.
// Anda dapat mempelajari lebih lanjut melalui
https://devblogs.microsoft.com/typescript/announcing-typescript-3-8-beta/#jsdoc-modifiers
class Binatang {
constructor(tipe) {
/** @private */
this.tipe = tipe
/** @protected */
this.cepat = tipe === 'citah'
}
bersuara() {
// Biasanya binatang ini jarang menimbulkan suara
if (this.tipe === 'bengal') {
console.log('')
} else {
throw new Error('bersuara dipanggil pada kelas dasar')
}
}
}
class Kucing extends Binatang {
constructor(type) {
super(type || 'kucing rumahan')
}
bersuara() {
console.log('meow')
}
lari() {
if (this.cepat) {
console.log('Berhasil menjauh')
} else {
console.log('Gagal menjauh')
}
}
}
class Citah extends Kucing {
constructor() {
super('citah')
}
}
class Bengal extends Kucing {
constructor() {
super('bengal')
}
}
const kucingRumahan = new Kucing()
kucingRumahan.bersuara()
// Atribut-atribut di bawah ini tidak tersedia
kucingRumahan.tipe
kucingRumahan.cepat