Class di TypeScript
Class dengan field bertipe, constructor, parameter properties, dan implements.
Class + Tipe = Kontrak yang Kuat
class Pengguna {
id: number;
nama: string;
email?: string;
constructor(id: number, nama: string) {
this.id = id;
this.nama = nama;
}
sapa(): string {
return `Halo, saya ${this.nama}`;
}
}
const ana = new Pengguna(1, "Ana");
ana.id = "satu";
// Error: Type 'string' is not assignable to type 'number'.Dengan strictPropertyInitialization (bagian dari strict mode), setiap field wajib diisi di constructor atau diberi nilai awal. Lupa assign? Error kompilasi, bukan undefined misterius.
Parameter Properties: Shortcut Constructor
class Produk {
constructor(
public id: number,
public nama: string,
private stok: number = 0,
) {}
kurangiStok(jumlah: number): void {
this.stok -= jumlah;
}
}Menulis public/private di parameter constructor otomatis membuat field sekaligus mengisinya. Tiga baris menggantikan deklarasi field plus assignment manual. Ini idiom khas TypeScript yang tidak ada di JavaScript murni.
Class Mengimplementasikan Interface
interface DapatDicetak {
cetak(): string;
}
class Laporan implements DapatDicetak {
cetak(): string {
return "Isi laporan...";
}
}implements memaksa class memenuhi kontrak interface. Ubah interface (tambah method wajib), semua class yang implements langsung error sampai diperbaiki. Refactoring besar jadi terkendali.
Class sebagai Tipe
Nama class sekaligus menjadi tipe untuk instance-nya:
function proses(p: Produk) {
// p dijamin instance Produk
}Bedakan dengan interface: class membawa implementasi runtime (constructor, method), interface hanya kontrak tipe yang hilang saat kompilasi.
Catatan teknis: Opsi
useDefineForClassFields(default true di target modern) mengubah cara field diinisialisasi mengikuti semantik JavaScript standar, yang bisa menimpa properti dari parent class secara tak terduga. Kalau migrasi kode lama yang mengandalkan assignment di constructor parent, ini sumber bug yang halus. Untuk kode baru, biarkan default dan tulis field dengan nilai awal yang eksplisit.