Kelas dalam TypeScript
Artikel ini menjelaskan kelas dalam TypeScript.
YouTube Video
Kelas dalam TypeScript
Kelas dalam TypeScript didasarkan pada kelas ES6 JavaScript dan menawarkan fitur tambahan seperti anotasi tipe dan pengubah akses. Ini memungkinkan Anda memanfaatkan konsep pemrograman berorientasi objek sambil memastikan keamanan tipe yang lebih kuat dan jelas.
Di bawah ini adalah penjelasan tentang penggunaan dasar dan fitur kelas dalam TypeScript.
Definisi Kelas Dasar
1class Person {
2 name: string; // Member variable
3 age: number; // Member variable
4
5 // Constructor
6 constructor(name: string, age: number) {
7 this.name = name;
8 this.age = age;
9 }
10
11 // Method
12 greet(): void {
13 console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
14 }
15}
16
17const person = new Person("Alice", 25);
18person.greet(); // Hello, my name is Alice and I am 25 years old.
name
danage
adalah properti (variabel anggota) dari kelas.constructor
adalah metode yang dipanggil saat membuat instance dari sebuah kelas, yang menerima argumen dan memberikan nilai ke properti.greet
adalah metode dari kelas, yang menunjukkan bahwa ia tidak memiliki nilai kembali dengan tipevoid
.
Pengubah Akses
Dalam TypeScript, Anda dapat menggunakan pengubah akses (public
, private
, protected
) untuk mengontrol akses ke properti dan metode kelas.
public
Secara default, semua properti dan metode adalah public
. Ini berarti mereka dapat diakses dari luar kelas.
1class Animal {
2 public species: string;
3
4 constructor(species: string) {
5 this.species = species;
6 }
7
8 public makeSound(): void {
9 console.log(`${this.species} makes a sound.`);
10 }
11}
12
13const animal = new Animal("Dog");
14console.log(animal.species); // Dog
15animal.makeSound(); // Dog makes a sound.
- Properti
species
dan metodemakeSound
dideklarasikan sebagaipublic
dan dapat diakses dari luar kelas.
private
Menggunakan pengubah private
mencegah akses ke properti atau metode dari luar kelas.
1class Car {
2 private brand: string;
3
4 constructor(brand: string) {
5 this.brand = brand;
6 }
7
8 public getBrand(): string {
9 return this.brand;
10 }
11}
12
13const car = new Car("Toyota");
14// console.log(car.brand); // Error: 'brand' is private and cannot be accessed.
15console.log(car.getBrand()); // Toyota
- Properti
brand
dideklarasikan sebagaiprivate
, sehingga tidak dapat diakses dari luar kelas. - Enkapsulasi data dapat dicapai dengan menyembunyikan properti menggunakan modifier
private
.
protected
Pengubah protected
membatasi akses dari luar kelas tetapi mengizinkannya dalam subkelas (kelas turunan).
1class Vehicle {
2 protected model: string;
3
4 constructor(model: string) {
5 this.model = model;
6 }
7}
8
9class Truck extends Vehicle {
10 public getModel(): string {
11 return this.model;
12 }
13}
14
15const truck = new Truck("Ford F-150");
16console.log(truck.getModel()); // Ford F-150
17
18// console.log(truck.model);
19// Error: Property 'model' is protected and only accessible within class 'Vehicle' and its subclasses.
- Properti
model
dideklarasikan sebagaiprotected
, sehingga tidak dapat diakses dari luar kelas, tetapi dapat diakses dari subclass.
Getter dan Setter
Dalam TypeScript, Anda dapat mendefinisikan getter dan setter menggunakan kata kunci get
dan set
untuk mengambil dan menetapkan nilai properti.
1class Employee {
2 private _salary: number;
3
4 constructor(salary: number) {
5 this._salary = salary;
6 }
7
8 // Getter
9 get salary(): number {
10 return this._salary;
11 }
12
13 // Setter
14 set salary(newSalary: number) {
15 if (newSalary > 0) {
16 this._salary = newSalary;
17 } else {
18 console.log("Salary must be positive.");
19 }
20 }
21}
22
23const employee = new Employee(50000);
24console.log(employee.salary); // 50000
25employee.salary = 60000;
26console.log(employee.salary); // 60000
27employee.salary = -100; // Salary must be positive.
- Dalam contoh ini, getter dan setter digunakan untuk properti
salary
untuk mengontrol akses dan pembaruan dari luar. Setter melakukan validasi untuk mencegah nilai negatif, dan menampilkan pesan peringatan jika nilai yang tidak valid diberikan.
Pewarisan
Dalam TypeScript, kelas dapat diwarisi. Dengan menggunakan kata kunci extends
, Anda dapat mewarisi fungsionalitas dari kelas induk.
1class Animal {
2 constructor(public name: string) {}
3
4 public move(): void {
5 console.log(`${this.name} is moving.`);
6 }
7}
8
9class Bird extends Animal {
10 public fly(): void {
11 console.log(`${this.name} is flying.`);
12 }
13}
14
15const bird = new Bird("Sparrow");
16bird.move(); // Sparrow is moving.
17bird.fly(); // Sparrow is flying.
- Dalam contoh ini, kelas
Bird
mewarisi dari kelasAnimal
, yang memungkinkannya menggunakan metodemove
dariAnimal
. Selain itu, ia mendefinisikan metodefly
sendiri, menambahkan fungsionalitas baru sambil mewarisi fitur dari kelas induk.
Kelas Abstrak
Kelas abstrak (abstract
) tidak dapat dibuat instance secara langsung dan digunakan sebagai template untuk memberikan implementasi konkret dalam subkelas.
1abstract class Shape {
2 abstract getArea(): number;
3
4 public describe(): void {
5 console.log("This is a shape.");
6 }
7}
8
9class Circle extends Shape {
10 constructor(private radius: number) {
11 super();
12 }
13
14 public getArea(): number {
15 return Math.PI * this.radius * this.radius;
16 }
17}
18
19const circle = new Circle(5);
20console.log(circle.getArea()); // 78.53981633974483
21circle.describe(); // This is a shape.
- Dalam contoh ini,
Shape
didefinisikan sebagai kelas abstrak, dangetArea
adalah metode abstrak yang harus diimplementasikan oleh subclass. KelasCircle
mewarisi kelas abstrak ini dan mengimplementasikan metodegetArea
miliknya sendiri untuk menghitung luas lingkaran. Selain itu, metode konkret sepertidescribe
diwarisi sebagai fungsionalitas umum dan dapat digunakan langsung sebagaimana adanya.
Hubungan dengan Antarmuka
Kelas dapat mengimplementasikan antarmuka, memastikan mereka memiliki properti dan metode tertentu.
1interface Flyable {
2 fly(): void;
3}
4
5class Airplane implements Flyable {
6 public fly(): void {
7 console.log("The airplane is flying.");
8 }
9}
10
11const airplane: Flyable = new Airplane();
12airplane.fly(); // The airplane is flying.
- Dalam contoh ini, interface
Flyable
mendefinisikan spesifikasi untuk metodefly
, dan kelasAirplane
mengimplementasikan interface ini dengan memberikan definisi konkret untuk metodefly
. Dengan ini, setiap objek yang bisa diperlakukan sebagai tipeFlyable
dijamin memiliki metodefly
.
Anggota Statis
Saat Anda mendefinisikan anggota statis dalam sebuah kelas, metode dan properti tersebut terkait dengan kelas itu sendiri. Anggota statis dapat dipanggil tanpa harus membuat instansi dari kelas tersebut.
1class MathUtils {
2 static PI: number = 3.14;
3
4 static add(a: number, b: number): number {
5 return a + b;
6 }
7}
8
9console.log(MathUtils.add(10, 20)); // 30
10console.log(MathUtils.PI); // 3.14
- Anda mendefinisikan metode statis menggunakan kata kunci
static
. - Dalam contoh ini, kelas
MathUtils
mendefinisikan metode statisadd
dan properti statisPI
. - Anggota statis tidak termasuk dalam instansi kelas, tetapi dapat dipanggil langsung dari kelas itu sendiri.
Ringkasan
Kelas TypeScript menambahkan fitur seperti keamanan tipe, pengubah akses, dan kelas abstrak ke dalam fungsi kelas JavaScript. Hal ini memungkinkan pemrograman berorientasi objek yang lebih kuat dan lebih aman.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.