TypeScript中的interface和type有什么区别?

219 阅读2分钟

在TypeScript中,interface和type都是用来描述对象类型的工具。虽然它们在某些情况下可以互换使用,但它们有一些重要的区别。

interface

interface通常用于描述一个对象或类的形状,它定义了一个包含多个属性的结构。interface的定义是一种合约,它规定了必须实现的属性和方法。

下面是一个简单的interface示例:

interface Person {
  name: string;
  age: number;
  sayHello: () => void;
}

这个interface定义了一个Person类型,它必须包含name和age两个属性,以及一个sayHello方法。

type

type用于创建类型别名,它定义了一种类型的名称,可以用来代替其他类型的使用。type通常用于描述复杂的类型,如联合类型、交叉类型、元组等。

下面是一个简单的type示例:

type Person = {
  name: string;
  age: number;
  sayHello: () => void;
};

这个type定义了一个名为Person的类型别名,它与上面的interface定义相同。

区别

虽然interface和type可以互换使用,但它们之间有一些区别:

  1. interface只能用于描述对象和类的形状,而type可以用于创建任何类型的别名。

  2. interface可以被类实现(implement),而type不行。

  3. interface可以扩展(extends)其他interface,而type不行。

  4. type支持更复杂的类型定义,如联合类型、交叉类型、元组等,而interface不支持。

  5. type可以用于定义泛型类型别名,而interface不行。

下面是一些示例:

// interface扩展其他interface
interface Animal {
  name: string;
}

interface Dog extends Animal {
  bark: () => void;
}

// type定义联合类型
type Status = "loading" | "success" | "error";

// type定义元组类型
type Point = [number, number];

// type定义泛型类型别名
type Result<T> = {
  success: true;
  value: T;
} | {
  success: false;
  error: string;
};

总的来说,interface和type都是非常有用的工具,可以帮助我们更好地描述和管理代码中的类型。在选择使用哪种工具时,需要考虑到类型的复杂度和使用场景等因素。