📜  在 TypeScript 中何时使用接口以及何时使用类?(1)

📅  最后修改于: 2023-12-03 14:51:11.573000             🧑  作者: Mango

在 TypeScript 中何时使用接口以及何时使用类?

在 TypeScript 中,接口和类都是面向对象编程(OOP)中的重要概念。接口描述了对象应该长成什么样子,而类则表示了具有相同行为和属性的对象。

使用接口

当你只需要描述对象的形状时,例如在函数参数或返回值中使用,或者当你需要强制一个对象满足某些约束时,你应该使用接口。以下是一个示例:

interface Person {
  firstName: string;
  lastName: string;
  age: number;
}

function greet(person: Person) {
  return `Hello, ${person.firstName} ${person.lastName}! You are ${person.age} years old.`;
}

const myFriend = { firstName: "Alice", lastName: "Smith", age: 30 };

console.log(greet(myFriend)); // 输出:Hello, Alice Smith! You are 30 years old.

在此示例中,我们定义了一个名为 Person 的接口,其中包含三个属性:firstNamelastNameage。我们还编写了一个函数 greet,该函数使用 Person 接口类型的参数,并返回字符串。我们创建了一个名称为 myFriend 的对象,该对象符合 Person 接口的描述,然后将其作为参数传递给 greet 函数。

使用类

当您需要创建具有相似行为和属性的多个对象时,您应该使用类。类提供了一种创建对象的模板,该模板定义了对象的实例变量和方法的行为。以下是一个示例:

class Rectangle {
  private _width: number;
  private _height: number;

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

  public get width(): number {
    return this._width;
  }

  public set width(value: number) {
    this._width = value;
  }

  public get height(): number {
    return this._height;
  }

  public set height(value: number) {
    this._height = value;
  }

  public getArea(): number {
    return this._width * this._height;
  }
}

const myRectangle = new Rectangle(5, 6);
console.log(myRectangle.getArea()); // 输出:30

在此示例中,我们定义了一个名为 Rectangle 的类,该类具有私有属性 _width_height,以及一个名为 getArea 的公共方法,该方法返回矩形的面积。我们使用 constructor 方法初始化实例变量,在访问器属性 widthheight 中使用了 getset 方法。最后,我们创建了一个名为 myRectangle 的对象,该对象符合 Rectangle 类的描述并使用它的 getArea 方法计算并输出面积。

接口与类的选择

在使用接口和类时,您应该考虑您要解决的问题确定您选择哪种方法更合适。接口用于描述对象的形状和属性,并对这些对象施加约束,例如函数参数和返回值。类用于创建具有相似行为和属性的多个对象,并提供用于创建和管理这些对象的模板。如果您需要创建具有相似行为和属性的多个对象,则应使用类。如果您只需要描述对象的形状或约束函数参数和返回值,则应使用接口。

总的来说:

  • 当您需要描述对象的形状或约束函数参数和返回值时,请使用接口。
  • 当您需要创建具有相似行为和属性的多个对象时,请使用类。

以上是在 TypeScript 中何时使用接口以及何时使用类的建议,但仍需视情况而定。在开发 TypeScript 应用程序时,您应根据具体需求来制定最佳的开发实践。