Klassen in TypeScript
Dieser Artikel erklärt Klassen in TypeScript.
YouTube Video
Klassen in TypeScript
Klassen in TypeScript basieren auf den ES6-Klassen von JavaScript und bieten zusätzliche Funktionen wie Typanmerkungen und Zugriffsmodifikatoren. Dies ermöglicht es Ihnen, die Konzepte der objektorientierten Programmierung zu nutzen und gleichzeitig eine robustere und klarere Typensicherheit zu gewährleisten.
Im Folgenden werden die grundlegende Verwendung und Funktionen von Klassen in TypeScript erläutert.
Grundlegende Klassendefinition
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.
nameundagesind Eigenschaften (Mitgliedsvariablen) der Klasse.- Der
Konstruktorist eine Methode, die aufgerufen wird, wenn eine Instanz einer Klasse erstellt wird. Sie nimmt Argumente entgegen und weist Werte den Eigenschaften zu. greetist eine Methode der Klasse, die durch den Typvoidangibt, dass sie keinen Rückgabewert hat.
Zugriffsmodifikatoren
In TypeScript können Sie Zugriffsmodifikatoren (public, private, protected) verwenden, um den Zugriff auf Eigenschaften und Methoden von Klassen zu steuern.
public
Standardmäßig sind alle Eigenschaften und Methoden public. Das bedeutet, dass sie von außerhalb der Klasse zugänglich sind.
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.
- Die Eigenschaft
speciesund die MethodemakeSoundsind alspublicdeklariert und können von außerhalb der Klasse zugegriffen werden.
private
Die Verwendung des Modifikators private verhindert den Zugriff auf die Eigenschaften oder Methoden von außerhalb der Klasse.
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
- Die Eigenschaft
brandist alsprivatedeklariert, daher kann von außerhalb der Klasse nicht darauf zugegriffen werden. - Die Kapselung von Daten kann erreicht werden, indem Eigenschaften mit dem Modifier
privateverborgen werden.
protected
Der Modifikator protected schränkt den Zugriff von außerhalb der Klasse ein, erlaubt ihn jedoch in Unterklassen (abgeleiteten Klassen).
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.
- Die Eigenschaft
modelist alsprotecteddeklariert, daher kann von außerhalb der Klasse nicht darauf zugegriffen werden, aber ihre Unterklassen haben Zugriff darauf.
Getter und Setter
In TypeScript können Sie Getter und Setter mit den Schlüsselwörtern get und set definieren, um Eigenschaftswerte abzurufen und festzulegen.
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.
- In diesem Beispiel werden für die Eigenschaft
salaryGetter und Setter verwendet, um den externen Zugriff sowie Aktualisierungen zu steuern. Der Setter führt eine Validierung durch, um negative Werte zu verhindern, und zeigt eine Warnmeldung an, falls ein ungültiger Wert bereitgestellt wird.
Vererbung
In TypeScript können Klassen vererbt werden. Mit dem Schlüsselwort extends können Sie Funktionalitäten von einer übergeordneten Klasse erben.
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.
- In diesem Beispiel erbt die Klasse
Birdvon der KlasseAnimal, was es ihr ermöglicht, die MethodemovevonAnimalzu verwenden. Außerdem definiert sie ihre eigene Methodeflyund fügt so neue Funktionalitäten hinzu, während sie Eigenschaften von der Elternklasse erbt.
Abstrakte Klassen
Abstrakte Klassen (abstract) können nicht direkt instanziiert werden und dienen als Vorlagen, um konkrete Implementierungen in Unterklassen bereitzustellen.
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.
- In diesem Beispiel ist
Shapeals abstrakte Klasse definiert undgetAreaist eine abstrakte Methode, die von den Unterklassen implementiert werden muss. Die KlasseCircleerbt von dieser abstrakten Klasse und implementiert ihre eigene MethodegetArea, um die Fläche eines Kreises zu berechnen. Darüber hinaus werden konkrete Methoden wiedescribeals gemeinsame Funktionalität geerbt und können unverändert verwendet werden.
Beziehung zu Schnittstellen
Klassen können Schnittstellen implementieren, um sicherzustellen, dass sie bestimmte Eigenschaften und Methoden haben.
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.
- In diesem Beispiel definiert das Interface
Flyabledie Spezifikation für die Methodeflyund die KlasseAirplaneimplementiert dieses Interface, indem sie eine konkrete Implementierung der Methodeflybereitstellt. Damit ist garantiert, dass jedes Objekt, das als TypFlyablebehandelt werden kann, über eine Methodeflyverfügt.
Statische Mitglieder
Wenn Sie statische Mitglieder in einer Klasse definieren, werden diese Methoden und Eigenschaften der Klasse selbst zugeordnet. Statische Mitglieder können aufgerufen werden, ohne die Klasse zu instanziieren.
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
- Statische Methoden werden mit dem Schlüsselwort
staticdefiniert. - In diesem Beispiel definiert die Klasse
MathUtilseine statische Methodeaddund eine statische EigenschaftPI. - Statische Mitglieder gehören nicht zu Instanzen der Klasse, sondern können direkt von der Klasse selbst aufgerufen werden.
Zusammenfassung
TypeScript-Klassen fügen Funktionen wie Typsicherheit, Zugriffsmodifikatoren und abstrakte Klassen zur JavaScript-Klassenfunktionalität hinzu. Dies ermöglicht leistungsfähigere und sicherere objektorientierte Programmierung.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.