interface 和 type 都是创建自定义类型的手段。
主要区别:
1、扩展方式
interface使用extends关键字来继承另一个接口。type使用交叉类型&来组合多个类型。
2、灵活性
interface只能描述对象形状,不能用于联合类型、交叉类型等。type更加灵活,可以描述对象形状、联合类型、交叉类型、映射类型等。
3、 递归和自引用
interface不能直接在定义中引用自己(除非通过间接方式如泛型)。type可以在定义中直接引用自己,创建递归类型。
4、合并行为
- 如果有多个具有相同名称的
interface,它们会被合并为一个接口。 type不支持合并行为。
一、interface接口
接口用来定义一个类中应该包含哪些属性和方法,同时接口也可以当成类型声明来使用。
接口可以在定义时去限制类的结构,接口中的所有属性都不能有实际的值(所有的方法都得是抽象方法)
接口的定义方式:
interface Person {
name: string;
age: number;
greet(): void; // 描述一个方法
}
使用:
const employee: Person = {
name: "John Doe",
age: 30,
greet() {
console.log("Hello!");
}
};
二、type
type 是一种使用 type 关键字定义的类型别名。
它也可以描述一个对象的形状,但比 interface 更加灵活。type 可以用于定义除了对象形状之外的其他类型,如基本类型、联合类型、交叉类型等。
type不能像interface那样被extends,但可以通过交叉类型实现类似效果。
示例:
type Person = {
name: string;
age: number;
greet: () => void;
};
type Employee = Person & {
employeeId: string;
};
const employee: Employee = {
name: "Jane Doe",
age: 25,
employeeId: "54321",
greet() {
console.log("Hi!");
}
};
// 交叉类型示例
type Admin = Employee & {
adminLevel: number;
};
const admin: Admin = {
name: "Admin User",
age: 40,
employeeId: "67890",
greet() {
console.log("Admin greeting!");
},
adminLevel: 3
};
2605

被折叠的 条评论
为什么被折叠?



