浅谈TS中interface和type的区别
首先:在TypeScript中,interface和type是用于定义对象形状、函数签名和其他类型的关键字。它们在某些方面是相似的,但也有一些区别。下面是对它们之间的区别进行详细解释:
- 语法不同:
-
interface使用interface关键字定义,例如:interface Person { name: string; age: number; } -
type使用type关键字定义,例如:type Person = { name: string; age: number; }
- 可重复定义:
-
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”
};
- 扩展能力:
interface可以使用extends关键字扩展其他接口。例如:
interface Animal {
name: string;
}
interface Cat extends Animal {
purr(): void;
}
- type可以使用交叉类型(&)进行类型合并,实现类似的功能。例如:
type Animal = {
name: string;
};
type Cat = Animal & {
purr(): void;
};
- 可用性:
-
interface用于描述对象的形状,还可以用于描述类、函数、数组等。 -
type是更通用的类型别名,可以描述任何类型,包括对象、联合类型、交叉类型、字面量类型等。
总体而言,interface更常用于描述对象的形状和类的继承关系,而type则更通用,适用于创建复杂的类型别名。在选择使用interface还是type时,可以根据具体的使用场景和个人偏好来决定。在实际项目中,interface和type常常可以互换使用,但需要注意遵循一致性,选择一种风格并保持一致。