返回

探索 TypeScript 中的类和接口:深层次解读

前端

引言

TypeScript 引入了类型系统,使 JavaScript 开发人员能够在开发过程中发现类型错误,从而提高代码质量。类和接口作为 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 中,接口使用 interface 关键字定义。

interface IPerson {
  name: string;
  age: number;

  greet(): void;
}

类与接口的关系

类可以实现接口,这意味着类必须提供接口中定义的所有方法和属性。这样做有助于确保类符合特定的契约,从而提高代码的可读性和可维护性。

class Employee implements IPerson {
  name: string;
  age: number;
  salary: number;

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

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old. I earn ${this.salary}.`);
  }
}

继承

继承允许一个类从另一个类(基类)继承属性和方法。派生类(子类)可以扩展基类并添加自己的行为和属性。在 TypeScript 中,继承使用 extends 关键字实现。

class Manager extends Employee {
  department: string;

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

  greet() {
    super.greet();
    console.log(`I am the manager of the ${this.department} department.`);
  }
}

多态性

多态性是指派生类对象可以被视为其基类对象的能力。这意味着可以在不修改代码的情况下,使用基类变量引用派生类对象。

const employee: IPerson = new Employee("John", 30, 50000);
employee.greet(); // Output: Hello, my name is John and I am 30 years old. I earn 50000.

const manager: IPerson = new Manager("Mary", 40, 60000, "Sales");
manager.greet(); // Output: Hello, my name is Mary and I am 40 years old. I earn 60000. I am the manager of the Sales department.

抽象类

抽象类不能被实例化,而是作为派生类的模板。它们包含抽象方法,这些方法没有实现,必须由派生类实现。抽象类用于定义通用行为或接口,而实际实现留给派生类。

abstract class Shape {
  abstract area(): number;
}

class Rectangle extends Shape {
  width: number;
  height: number;

  constructor(width: number, height: number) {
    this.width = width;
    this.height = height;
  }

  area(): number {
    return this.width * this.height;
  }
}

代码示例

const rectangle = new Rectangle(5, 10);
console.log(rectangle.area()); // Output: 50

结论

类和接口是 TypeScript 中面向对象编程的关键概念。它们使开发人员能够组织代码、增强可读性和可维护性。通过理解这些概念之间的关系,开发人员可以创建健壮、可扩展且易于理解的 TypeScript 代码。