返回

TypeScript 中的类:从初学者到大师

前端

搞定 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: 成员仅在类内部可见。

在上面的示例中,属性 nameagepublic,这意味着它们可以在类内外访问。

构造函数

构造函数是类的特殊方法,在创建类的新实例时自动调用。它用于初始化对象属性。在上面的示例中,constructor 方法接受 nameage 作为参数并使用它们来初始化属性。

继承

继承允许一个类(子类)从另一个类(父类)继承属性和方法。使用 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}.`);
  }
}

多态性

多态性允许将子类对象视为父类对象。这使我们可以编写通用代码,适用于派生自共同基类的不同类对象。例如,我们可以使用以下代码为 PersonEmployee 对象打印问候语:

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 代码。