Klasser i TypeScript
Denna artikel förklarar klasser i TypeScript.
YouTube Video
Klasser i TypeScript
Klasser i TypeScript är baserade på JavaScripts ES6-klasser och erbjuder ytterligare funktioner som typannoteringar och åtkomstmodifierare. Detta gör det möjligt att använda koncept inom objektorienterad programmering samtidigt som det ger starkare och tydligare typesäkerhet.
Nedan följer förklaringar av grundläggande användning och funktioner hos klasser i TypeScript.
Grundläggande klassdefinition
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
ochage
är egenskaper (medlemsvariabler) i klassen.constructor
är en metod som anropas när en instans av en klass skapas. Den tar argument och tilldelar värden till egenskaper.greet
är en metod i klassen som indikerar att den inte har något returvärde genom att vara av typenvoid
.
Åtkomstmodifierare
I TypeScript kan du använda åtkomstmodifierare (public
, private
, protected
) för att kontrollera åtkomst till klassens egenskaper och metoder.
public
Som standard är alla egenskaper och metoder public
. Detta innebär att de kan nås utanför klassen.
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.
species
-egenskapen ochmakeSound
-metoden är deklarerade sompublic
och kan nås utanför klassen.
private
Genom att använda modifieraren private
förhindras åtkomst till egenskaperna eller metoderna utanför klassen.
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
brand
-egenskapen är deklarerad somprivate
, så den kan inte nås utanför klassen.- Inkapsling av data kan uppnås genom att dölja egenskaper med
private
-modifikatorn.
protected
Modifieraren protected
begränsar åtkomst utanför klassen men tillåter det i underklasser (härledda klasser).
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.
model
-egenskapen är deklarerad somprotected
, så den kan inte nås utanför klassen, men kan nås från underklasser.
Getters och Setters
I TypeScript kan du definiera getters och setters med hjälp av nyckelorden get
och set
för att hämta och ändra värden för egenskaper.
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.
- I det här exemplet används en getter och setter för
salary
-egenskapen för att kontrollera extern åtkomst och uppdateringar. Settern utför validering för att förhindra negativa värden och visar ett varningsmeddelande om ett ogiltigt värde anges.
Arv
I TypeScript kan klasser ärvas. Med hjälp av nyckelordet extends
kan du ärva funktionalitet från en föräldraklass.
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.
- I det här exemplet ärver
Bird
-klassen frånAnimal
-klassen, vilket gör att den kan användamove
-metoden frånAnimal
. Dessutom definierar den sin egenfly
-metod, vilket lägger till ny funktionalitet samtidigt som den ärver egenskaper från basklassen.
Abstrakta klasser
Abstrakta klasser (abstract
) kan inte instansieras direkt och används som mallar för att ge konkreta implementationer i underklasser.
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.
- I det här exemplet definieras
Shape
som en abstrakt klass, ochgetArea
är en abstrakt metod som måste implementeras av underklasser.Circle
-klassen ärver denna abstrakta klass och implementerar sin egengetArea
-metod för att beräkna cirkelns area. Dessutom ärvs konkreta metoder somdescribe
som gemensam funktionalitet och kan användas som de är.
Relation med gränssnitt
Klasser kan implementera gränssnitt och säkerställa att de har specifika egenskaper och metoder.
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.
- I det här exemplet definierar
Flyable
-gränssnittet specifikationen förfly
-metoden ochAirplane
-klassen implementerar detta gränssnitt genom att tillhandahålla en konkret definition förfly
-metoden. Med detta är det garanterat att alla objekt som kan behandlas som enFlyable
-typ har enfly
-metod.
Statiska medlemmar
När du definierar statisk medlemmar i en klass är dessa metoder och egenskaper kopplade till själva klassen. Statiska medlemmar kan anropas utan att instansiera klassen.
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
- Du definierar statiska metoder med nyckelordet
static
. - I detta exempel definierar klassen
MathUtils
en statisk metodadd
och en statisk egenskapPI
. - Statiska medlemmar tillhör inte klassens instanser, utan kan anropas direkt från själva klassen.
Sammanfattning
TypeScript-klasser lägger till funktioner som typ-säkerhet, åtkomstmodifierare och abstrakta klasser till JavaScript-klassernas funktionalitet. Detta möjliggör mer kraftfull och säkrare objektorienterad programmering.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.