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.
name
danage
adalah sifat (pembolehubah ahli) bagi kelas tersebut.constructor
adalah kaedah yang dipanggil apabila mencipta instans kelas, yang mengambil hujah dan memberikan nilai kepada sifat-sifatnya.greet
adalah 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
species
dan kaedahmakeSound
diisytiharkan sebagaipublic
dan 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
brand
diisytiharkan 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
model
diisytiharkan 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
salary
untuk 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
Bird
mewarisi dari kelasAnimal
, yang membolehkannya menggunakan kaedahmove
daripadaAnimal
. Selain itu, ia menentukan kaedahfly
sendiri, 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,
Shape
ditakrifkan sebagai kelas abstrak, dangetArea
ialah kaedah abstrak yang mesti dilaksanakan oleh subkelas. KelasCircle
mewarisi kelas abstrak ini dan melaksanakan kaedahgetArea
sendiri untuk mengira luas bulatan. Selain itu, kaedah konkrit sepertidescribe
diwarisi 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
Flyable
menentukan spesifikasi untuk kaedahfly
, dan kelasAirplane
melaksanakan antara muka ini dengan menyediakan definisi konkrit untuk kaedahfly
. Dengan ini, mana-mana objek yang boleh dianggap sebagai jenisFlyable
dijamin 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
MathUtils
mentakrifkan kaedah statikadd
dan 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.