返回

TypeScript 中的类——纯粹的面向对象编程范式

前端

TypeScript 中的类是一种数据类型,用于表示现实世界中的实体或概念。它提供了一种将数据和行为组织成一个单一单元的方法,使代码更易于理解、维护和扩展。类是由 class 声明的,它定义了类的结构和行为。

类和对象

类是对象的蓝图,它定义了对象的数据类型和行为。对象是类的实例,它包含了类定义的数据和行为。例如,我们可以定义一个 Person 类来表示人:

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.`);
  }
}

在这个例子中,Person 类定义了两个属性:nameage,以及一个方法 greet()。我们可以使用 new 关键字来创建 Person 类的实例:

const person1 = new Person('John Doe', 30);
person1.greet(); // Hello, my name is John Doe and I am 30 years old.

继承

继承是 OOP 中的一种重要概念,它允许我们创建新的类,这些类共享父类的属性和行为。例如,我们可以定义一个 Student 类来表示学生,Student 类继承自 Person 类:

class Student extends Person {
  studentId: number;

  constructor(name: string, age: number, studentId: number) {
    super(name, age);
    this.studentId = studentId;
  }

  study() {
    console.log(`${this.name} is studying.`);
  }
}

Student 类继承了 Person 类中的所有属性和方法,并添加了一个新的属性 studentId 和一个新的方法 study()。我们可以使用 new 关键字来创建 Student 类的实例:

const student1 = new Student('Jane Doe', 20, 12345);
student1.greet(); // Hello, my name is Jane Doe and I am 20 years old.
student1.study(); // Jane Doe is studying.

多态性

多态性是 OOP 中的另一个重要概念,它允许我们对不同的对象使用相同的接口。例如,我们可以定义一个 greet() 方法,它可以被 Person 类和 Student 类中的对象调用,即使这些对象具有不同的属性和行为:

function greet(person: Person) {
  console.log(`Hello, my name is ${person.name} and I am ${person.age} years old.`);
}

greet(person1); // Hello, my name is John Doe and I am 30 years old.
greet(student1); // Hello, my name is Jane Doe and I am 20 years old.

多态性使我们能够编写更灵活和可重用的代码,因为它允许我们在不修改代码的情况下处理不同类型