浅谈TS中interface和type的区别

263 阅读2分钟

浅谈TS中interface和type的区别

首先:在TypeScript中,interfacetype是用于定义对象形状、函数签名和其他类型的关键字。它们在某些方面是相似的,但也有一些区别。下面是对它们之间的区别进行详细解释:

  1. 语法不同
  • interface使用interface关键字定义,例如:interface Person { name: string; age: number; }

  • type使用type关键字定义,例如:type Person = { name: string; age: number; }

  1. 可重复定义
  • interface支持在相同作用域内多次定义同一个名称的接口,会自动合并同名接口的声明。例如:

interface Person {
  name: string;
}

interface Person {
  age: number;
}

const person: Person = {
  name: 'John',
  age: 25,
};

  • type不支持在相同作用域内多次定义同一个名称的类型别名,会报错。例如:
type Person = {
  name: string;
};

type Person = {
  age: number; // 报错: 重复的标识符“Person”
};
  1. 扩展能力
  • interface可以使用extends关键字扩展其他接口。例如:
interface Animal {
  name: string;
}

interface Cat extends Animal {
  purr(): void;
}
  • type可以使用交叉类型(&)进行类型合并,实现类似的功能。例如:
type Animal = {
  name: string;
};

type Cat = Animal & {
  purr(): void;
};
  1. 可用性
  • interface用于描述对象的形状,还可以用于描述类、函数、数组等。

  • type是更通用的类型别名,可以描述任何类型,包括对象、联合类型、交叉类型、字面量类型等。

总体而言,interface更常用于描述对象的形状和类的继承关系,而type则更通用,适用于创建复杂的类型别名。在选择使用interface还是type时,可以根据具体的使用场景和个人偏好来决定。在实际项目中,interfacetype常常可以互换使用,但需要注意遵循一致性,选择一种风格并保持一致。