在 TypeScript 中,interface 和 type 都可以用来定义一个数据的类型,那么它们有什么区别呢?

TypeScript

一、interface 接口类型

interface 是一种用来声明对象类型的方式:

interface Person { name: string; age: number; } const person: Person = { name: 'tiven', age: 18, };

可以使用 extends 关键字对 interface 进行继承:

interface Person { name: string; age: number; } interface Student extends Person { grade: number; } const student: Student = { name: 'tiven', age: 18, grade: 1, };

二、type 类型别名

在 ts 里,我们可以使用 type 关键词来给任意类型添加命名,这样可以方便引用和复用:

type Person = { name: string; age: number; }; const person: Person = { name: 'tiven', age: 18, };

使用 & 符号将多个 type 进行组合:

type Person = { name: string; age: number; }; type Student = { grade: number; }; type StudentPerson = Person & Student;

使用 | 符号将多个常量组成 union 联合类型:

type Status = 'success' | 'error' | 'warning'; const status: Status = 'success';

三、interface 和 type 的区别

  1. interface 的重复声明可以合并,type 不能重复声明:
interface Person { name: string; age: number; } interface Person { grade: number; } type Person = { // ❌ Error: type 不能重复声明 name: string; age: number; }
  1. interface 只能声明对象类型,但 type 除了对象类型以外,还可以声明简单类型和 union 联合类型
  2. type 通过 & 符号进行类型合并,而 interface 通过 extends 关键词实现继承

参考文档:https://mp.weixin.qq.com/s/3myeGg0A8yUq4E04gXzREA


欢迎访问:天问博客