TypeScript 中的类:从初学者到大师
2023-11-21 19:15:26
搞定 TS,就靠这个系列(八)
导言
在前面的文章中,我们探讨了 TypeScript 的基础知识、数据类型和函数。现在,我们进入面向对象编程 (OOP) 的核心概念:类。类是创建对象并定义其行为和属性的蓝图。在 TypeScript 中,类提供了一种强大的机制,可用于组织代码、提高代码重用性和维护性。
什么是类?
类是用来表示一组具有相同特征和行为的对象的抽象数据类型。类定义了对象的数据和行为,称为属性和方法。对象是类的实例,它们拥有类的属性和方法。
创建类
在 TypeScript 中,可以使用 class
创建类。类声明包括类名、花括号内的类体和类成员(属性和方法)。例如:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
访问修饰符
TypeScript 提供了访问修饰符,用于控制类成员对其他类和代码的可见性。有三个访问修饰符:
- public: 成员在类内外都可见。
- protected: 成员在类及其子类中可见。
- private: 成员仅在类内部可见。
在上面的示例中,属性 name
和 age
是 public
,这意味着它们可以在类内外访问。
构造函数
构造函数是类的特殊方法,在创建类的新实例时自动调用。它用于初始化对象属性。在上面的示例中,constructor
方法接受 name
和 age
作为参数并使用它们来初始化属性。
继承
继承允许一个类(子类)从另一个类(父类)继承属性和方法。使用 extends
关键字实现继承。子类可以重写父类的方法并定义自己的方法。例如:
class Employee extends Person {
salary: number;
constructor(name: string, age: number, salary: number) {
super(name, age);
this.salary = salary;
}
greet() {
super.greet();
console.log(`My salary is ${this.salary}.`);
}
}
多态性
多态性允许将子类对象视为父类对象。这使我们可以编写通用代码,适用于派生自共同基类的不同类对象。例如,我们可以使用以下代码为 Person
和 Employee
对象打印问候语:
const person = new Person('John', 30);
const employee = new Employee('Jane', 25, 100000);
const greetAll = (people: Person[]) => {
people.forEach((person) => person.greet());
};
greetAll([person, employee]);
抽象类
抽象类不能被实例化,但可以被其他类继承。它们用于定义不能直接创建对象的通用接口或基类。抽象方法没有实现,子类必须重写这些方法。例如:
abstract class Shape {
abstract getArea(): number;
abstract getPerimeter(): number;
}
静态方法和属性
静态方法和属性属于类本身,而不是其实例。它们使用 static
关键字声明。静态方法可以访问静态属性,但不能访问实例属性。例如:
class MathUtils {
static PI = 3.14;
static calculateCircumference(radius: number): number {
return 2 * MathUtils.PI * radius;
}
}
实例方法和属性
实例方法和属性属于类的实例。它们可以使用 this
关键字访问实例属性。例如:
class Point {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
distanceToOrigin(): number {
return Math.sqrt(this.x ** 2 + this.y ** 2);
}
}
结论
类是 TypeScript 中 OOP 的基石,用于创建具有相同特征和行为的对象。它们提供强大的机制来组织代码、提高代码重用性和维护性。通过了解类的概念、访问修饰符、构造函数、继承、多态性、抽象类以及静态和实例方法和属性,我们可以编写更健壮、可扩展和易于维护的 TypeScript 代码。