×

Typescript 构建类型的主要方式 interface 和 type 的区别

2024-03-22 13:19:05 Falcon

在 TypeScript 中,构建类型有两种主要方式:使用 interface 和使用 type。这两种方式有相似之处,也有不同之处。 interface 通常用于定义对象的形状,可以很容易地通过扩展(使用 extends)来组合。一个类型别名 type 可以用来定义不仅是对象形状,还可以是其他 JavaScript 类型(如原始类型、联合类型、元组等)的类型。 接口(Interfaces):

  • 可以被扩展和实现(implements);
  • 用于定义对象的形状或类的公共接口;
  • 能自动合并声明(如两个同名接口会被合并为单一接口)。 类型别名(Type aliases):
  • 不能被扩展和实现,但可以使用交叉类型来组合其他类型(使用 &);
  • 可以用来定义更广泛的类型,比如联合类型、交叉类型、原始类型等;
  • 不会自动合并声明,且在错误提示中可能不如接口清晰。 例子使用 interface
interface User {
  name: string;
  age: number;
}
// 扩展接口
interface Admin extends User {
  privileges: string[];
}

例子使用 type

type User = {
  name: string;
  age: number;
};
// 组合类型
type Admin = User & {
  privileges: string[];
};
// 使用类型别名定义联合类型
type Status = 'active' | 'inactive' | 'suspended';

在很多情况下,两者可以互换使用,但是在需要使用具体的语言特性时(例如接口的声明合并),选择就很明显了。而在其他情况下,例如定义联合类型或者元组类型时,只能使用 type

本文收录于