返回

TypeScript 中接口和类型:重新审视你的代码构建方式

前端

TypeScript 中的接口

接口是 TypeScript 中用于定义对象的形状的工具。它允许您指定对象应该具有哪些属性及其类型。接口可以用来对函数的参数和返回值进行类型检查,也可以用来定义类的形状。

接口的基本用法

定义一个接口非常简单,只需要使用 interface ,然后指定接口的名称和它所包含的属性及其类型。例如,以下代码定义了一个名为 Person 的接口:

interface Person {
  name: string;
  age: number;
}

这个接口定义了一个 Person 对象,它有两个属性:nameagename 属性的类型是 stringage 属性的类型是 number

接口的扩展

接口可以被扩展以添加新的属性或覆盖现有属性。要扩展一个接口,可以使用 extends 关键字,然后指定要扩展的接口的名称。例如,以下代码定义了一个名为 Employee 的接口,它扩展了 Person 接口:

interface Employee extends Person {
  jobTitle: string;
  salary: number;
}

Employee 接口继承了 Person 接口的所有属性,并添加了两个新的属性:jobTitlesalary

接口的实现

类和对象可以通过实现接口来满足接口的要求。要实现一个接口,可以使用 implements 关键字,然后指定要实现的接口的名称。例如,以下代码定义了一个名为 Employee 的类,它实现了 Person 接口和 Employee 接口:

class Employee implements Person, Employee {
  name: string;
  age: number;
  jobTitle: string;
  salary: number;

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

Employee 类实现了 Person 接口和 Employee 接口的所有属性和方法。

TypeScript 中的类型

类型是 TypeScript 中用于定义变量、函数参数和返回值的数据类型的工具。类型可以是基本类型,如 stringnumberboolean,也可以是复合类型,如数组、对象和函数。

类型的基本用法

定义一个类型非常简单,只需要使用 type 关键字,然后指定类型的名称和它的类型。例如,以下代码定义了一个名为 PersonType 的类型:

type PersonType = {
  name: string;
  age: number;
};

这个类型定义了一个 Person 对象,它有两个属性:nameagename 属性的类型是 stringage 属性的类型是 number

类型别名

类型别名允许您为现有的类型创建一个新的名称。这可以使您的代码更具可读性和可维护性。例如,以下代码定义了一个名为 PersonAlias 的类型别名,它别名了 PersonType 类型:

type PersonAlias = PersonType;

现在,您可以使用 PersonAlias 类型来声明变量、函数参数和返回值。

联合类型

联合类型允许您定义一个类型,它可以是多个其他类型的其中一种。联合类型使用 | 符号来分隔不同的类型。例如,以下代码定义了一个名为 PersonOrEmployeeType 的联合类型,它可以是 PersonType 类型或 EmployeeType 类型:

type PersonOrEmployeeType = PersonType | EmployeeType;

现在,您可以使用 PersonOrEmployeeType 类型来声明变量、函数参数和返回值。

接口和类型的区别

接口和类型都是 TypeScript 中用于定义数据的工具,但它们之间存在一些关键的区别。

  • 接口定义了对象的形状,而类型定义了数据的类型。 接口可以用来定义对象应该具有哪些属性及其类型,而类型可以用来定义变量、函数参数和返回值的数据类型。
  • 接口可以被扩展,而类型不可以。 接口可以被扩展以添加新的属性或覆盖现有属性,而类型不可以。
  • 接口可以被类和对象实现,而类型不可以。 类和对象可以通过实现接口来满足接口的要求,而类型不可以。

何时使用接口,何时使用类型

在 TypeScript 中,接口和类型都有自己的适用场景。一般来说,以下情况适合使用接口:

  • 当您需要定义一个对象的形状时。
  • 当您需要对函数的参数和返回值进行类型检查时。
  • 当您需要定义类的形状时。

以下情况适合使用类型:

  • 当您需要定义一个变量的数据类型时。
  • 当您需要定义一个函数的参数的数据类型时。
  • 当您需要定义一个函数的返回值的数据类型时。

结论

接口和类型是 TypeScript 中构建强大且可维护的代码的关键。了解两者之间的区别可以帮助您编写出更清洁、更健壮的代码。