Kelas dalam TypeScript
Artikel ini menerangkan tentang kelas dalam TypeScript.
YouTube Video
Kelas dalam TypeScript
Kelas dalam TypeScript berdasarkan kelas ES6 JavaScript dan menawarkan ciri tambahan seperti anotasi jenis dan pengubah akses. Ini membolehkan anda memanfaatkan konsep pengaturcaraan berorientasikan objek sambil memastikan keselamatan jenis yang lebih kukuh dan jelas.
Di bawah adalah penerangan tentang penggunaan asas dan ciri-ciri kelas dalam TypeScript.
Definisi Kelas Asas
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.
namedanageadalah sifat (pembolehubah ahli) bagi kelas tersebut.constructoradalah kaedah yang dipanggil apabila mencipta instans kelas, yang mengambil hujah dan memberikan nilai kepada sifat-sifatnya.greetadalah kaedah bagi kelas tersebut, menunjukkan ia tidak mempunyai nilai balik dengan jenisvoid.
Pengubah Akses
Dalam TypeScript, anda boleh menggunakan pengubah akses (public, private, protected) untuk mengawal akses kepada sifat dan kaedah kelas.
public
Secara lalai, semua sifat dan kaedah adalah public. Ini bermakna ia boleh 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.
- Sifat
speciesdan kaedahmakeSounddiisytiharkan sebagaipublicdan boleh diakses dari luar kelas.
private
Menggunakan pengubah private menghalang akses kepada sifat atau kaedah 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
- Sifat
branddiisytiharkan sebagaiprivate, jadi ia tidak boleh diakses dari luar kelas. - Penkapsulan data boleh dicapai dengan menyembunyikan sifat menggunakan pengubah
private.
protected
Pengubah protected mengehadkan akses dari luar kelas tetapi membenarkannya dalam subkelas (kelas terbitan).
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.
- Sifat
modeldiisytiharkan sebagaiprotected, jadi ia tidak boleh diakses dari luar kelas tetapi boleh diakses dari subkelas.
Getter dan Setter
Dalam TypeScript, anda boleh mentakrifkan getter dan setter menggunakan kata kunci get dan set untuk mendapatkan dan menetapkan nilai sifat.
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 sifat
salaryuntuk mengawal akses dan kemas kini luaran. Setter menjalankan pengesahan untuk mengelakkan nilai negatif, dan memaparkan mesej amaran jika nilai tidak sah diberikan.
Pewarisan
Dalam TypeScript, kelas boleh diwarisi. Dengan menggunakan kata kunci extends, anda boleh mewarisi fungsi daripada 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
Birdmewarisi dari kelasAnimal, yang membolehkannya menggunakan kaedahmovedaripadaAnimal. Selain itu, ia menentukan kaedahflysendiri, menambah fungsi baharu sambil mewarisi ciri-ciri dari kelas induk.
Kelas Abstrak
Kelas abstrak (abstract) tidak boleh dijadikan instans secara langsung dan digunakan sebagai templat untuk menyediakan pelaksanaan konkrit 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,
Shapeditakrifkan sebagai kelas abstrak, dangetAreaialah kaedah abstrak yang mesti dilaksanakan oleh subkelas. KelasCirclemewarisi kelas abstrak ini dan melaksanakan kaedahgetAreasendiri untuk mengira luas bulatan. Selain itu, kaedah konkrit sepertidescribediwarisi sebagai fungsi umum dan boleh digunakan sebagaimana adanya.
Hubungan dengan Antara Muka
Kelas boleh melaksanakan antara muka, memastikan mereka mempunyai sifat dan kaedah 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, antara muka
Flyablemenentukan spesifikasi untuk kaedahfly, dan kelasAirplanemelaksanakan antara muka ini dengan menyediakan definisi konkrit untuk kaedahfly. Dengan ini, mana-mana objek yang boleh dianggap sebagai jenisFlyabledijamin mempunyai kaedahfly.
Ahli Statik
Apabila anda menentukan ahli statik dalam sesuatu kelas, kaedah dan sifat tersebut dikaitkan dengan kelas itu sendiri. Ahli statik boleh dipanggil tanpa mewujudkan objek kelas.
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 menentukan kaedah statik menggunakan kata kunci
static. - Dalam contoh ini, kelas
MathUtilsmentakrifkan kaedah statikadddan sifat statikPI. - Ahli statik tidak dimiliki oleh instans kelas, tetapi boleh dipanggil secara terus dari kelas itu sendiri.
Ringkasan
Kelas TypeScript menambah ciri seperti keselamatan jenis, pengubah akses, dan kelas abstrak kepada fungsi kelas JavaScript. Ini membolehkan pengaturcaraan berorientasikan objek yang lebih kuat dan selamat.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.